#kubernetes #docker-registry #haproxy-ingress
#kubernetes #docker-реестр #haproxy-вход
Вопрос:
Я настроил частный реестр docker внутри своего кластера Kubernetes. Развертывание выглядит следующим образом
apiVersion: apps/v1
kind: Deployment
metadata:
name: registry
labels:
app: registry
spec:
replicas: 1
selector:
matchLabels:
app: registry
template:
metadata:
labels:
app: registry
spec:
volumes:
- name: auth-vol
secret:
secretName: "registry-credentials"
containers:
- image: registry:2
name: registry
imagePullPolicy: IfNotPresent
env:
- name: REGISTRY_AUTH
value: "htpasswd"
- name: REGISTRY_AUTH_HTPASSWD_REALM
value: "k8s_user"
- name: REGISTRY_AUTH_HTPASSWD_PATH
value: "/auth/htpasswd"
ports:
- containerPort: 5000
volumeMounts:
- name: auth-vol
mountPath: /auth
Я выполняю маршрутизацию, используя следующий вход
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: registry-ingress
spec:
rules:
- host: "registry.<my domain>"
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: registry
port:
number: 80
Внешне у меня есть балансировщик нагрузки, завершающий SSL, а затем перенаправляющий запрос на соответствующий входной порт для HTTP-трафика. Извне сети у меня нет проблем с извлечением / извлечением из реестра. Однако из сети я получаю следующую ошибку, когда пытаюсь что-то развернуть и запустить kubectl pod describe <pod>
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 26s default-scheduler Successfully assigned default/server-6df575c99c-ltwqr to k8s-root-default-pool-3de67
Normal BackOff 24s (x2 over 25s) kubelet Back-off pulling image "registry.<mydomain>/server:0.0.1"
Warning Failed 24s (x2 over 25s) kubelet Error: ImagePullBackOff
Normal Pulling 11s (x2 over 25s) kubelet Pulling image "registry.<mydomain>/server:0.0.1"
Warning Failed 11s (x2 over 25s) kubelet Failed to pull image "registry.<mydomain>/server:0.0.1": rpc error: code = Unknown desc = Error response from daemon: Get https://registry.<mydomain>/v2/: x509: certificate is valid for haproxy-controller.default, not registry.<mydomain>.io
Warning Failed 11s (x2 over 25s) kubelet Error: ErrImagePull
Похоже, что запрос попадает в сертификат контроллера входа HAProxy, а не отправляется во внешний мир и попадает в SSL-сертификат балансировщика нагрузки. Есть ли какой-нибудь лучший способ, которым я должен это делать?
Ответ №1:
Я понял это. Раньше я использовал kubectl expose deployment/registry
для автоматического создания службы. Я понял, что если я создам службу NodePort, это откроет ее на фиксированном порту на всех узлах
apiVersion: v1
kind: Service
metadata:
name: registry
spec:
type: NodePort
selector:
app: registry
ports:
- port: 5000
targetPort: 5000
nodePort: 32500
Затем это позволило мне использовать «localhost: 32500» для доступа к реестру на всех узлах. Мне также пришлось обновить свое развертывание, чтобы извлечь образ из «localhost: 32500».