Ошибка при отправке изображений в реестр докеров внутри kubernetes и вход - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над докером для установки на рабочем столе kubernertes и хочу развернуть реестр докеров за входом.Я уже развернул реестр, и если я получаю доступ к каталогу API с помощью входа, это работает.Но когда я пытаюсь сделать push, у меня появляется эта ошибка:

error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx/1.15.11</center>\r\n</body>\r\n</html>\r\n"

Это yaml, который я использовал для создания тома, развертывания и обслуживания

kind: PersistentVolume
apiVersion: v1
metadata:
  name: dev-registry-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/host_mnt/c/docker-registry/dev-registry"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: dev-registry-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: dev-registry
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: dev-registry
    spec:
      containers:
        - name: dev-registry
          image: registry:2
          ports:
            - name: http-port
              containerPort: 5000
          volumeMounts:
            - name: docker-data
              mountPath: /var/lib/registry
      volumes:
        - name: docker-data
          persistentVolumeClaim:
            claimName: dev-registry-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: dev-registry
spec:
  ports:
    - port: 5000
      targetPort: 5000   
  selector:
    app: dev-registry

, и этоПравило входа я создал

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sudoku-ingress
  namespace: default
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
spec:
  rules:
    - host: dev-registry.sudoku.test.it
      http:
        paths:
          - backend:
              serviceName: dev-registry
              servicePort: 5000
            path: /

, где dev-registry.sudoku.test.it указывает на ip кластера kubernetes.Я уже добавляю адрес в незащищенный список докеров, и если я делаю запрос get на URL http://dev -registry.sudoku.test.it / v2 / _catalog , он отвечает правильно.

Я также пытался выставить реестр как NodePort, и в этом случае push работает корректно, поэтому проблема заключается во входной конфигурации.Как мне настроить вход?

Я также пробую это https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/docker-registry, но меняя только адрес реестра, он не работает.Есть идеи?

1 Ответ

0 голосов
/ 30 апреля 2019

Демон контейнера работает за пределами kubernetes. Поэтому он не может использовать сервис kubernetes для доступа к реестру. Вы можете использовать NodePort, как вы это сделали, или вы можете использовать обычное, разрешаемое извне имя хоста, которое указывает на ваш вход. (Конечно, вы также можете добавить запись хоста в файл hosts.txt, но я не одобряю это, поскольку это может вызвать проблемы с диагностикой, если кто-то не знает об этой конфигурации.)

Другой вариант, конечно, использовать внешний реестр докеров.

...