我正在使用docker进行桌面kubernertes安装,我想在入口处部署一个docker注册表。我已经部署了一个注册表,如果我使用ingress访问目录api就行了。但当我尝试推动时,我有这个错误:
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 IS
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指向kubernetes的集群ip。我已经在不安全的docker列表中添加了地址,如果我向url http://dev-registry.sudoku.test.it/v2/_catalog发出get请求,它会正确响应。
我还尝试将注册表公开为NodePort,在这种情况下,push工作正确,因此问题是入口配置。我如何配置入口?
我也尝试这个https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/docker-registry但只更改注册表地址它不起作用。任何的想法?
容器守护程序在kubernetes之外运行。因此,它不能使用kubernetes服务来访问注册表。您可以像使用NodePort一样使用NodePort,也可以使用指向入口的常规外部可解析主机名。 (当然你也可以在hosts.txt文件中添加一个主机条目,但我不鼓励它,因为如果有人不知道那个配置,它会导致很难诊断问题。)
另一种选择当然是使用外部docker注册表。