我有一个本地kubernetes集群,我想向其部署一个docker注册表,集群节点可以从中下载图像。在尝试执行此操作时,我尝试了几种识别服务的方法:NodePort,由MetalLB以Layer2模式提供的LoadBalancer,其Flannel网络IP(指默认为10.244上的IP。 0.0 / 16网络)及其群集IP(默认情况下,该IP是指10.96.0.0/16网络上的IP)。在每种情况下,通过docker连接到注册表都会失败。
我对IP执行了cURL,并意识到,在按预期方式解析请求时,tcp拨号步骤持续花费63.15 +/- 0.05秒,随后HTTP(s)请求本身在一定时间内完成在tcp拨号的误差范围内。这在所有部署中都是一致的,防火墙规则从相对严格的设置到除了由Kubernetes直接添加的规则之外没有其他设置。在从具有用于所有群集节点的VM的单个物理服务器到用于每个节点和物理交换机的独特物理硬件的网络体系结构中,它也是一致的。如前所述,在公开服务的方式上它也是一致的。无论我是使用ingress-nginx服务公开它还是直接公开docker注册表,它都是一致的。
此外,当我将另一个Pod部署到集群时,我能够毫无延迟地通过其集群IP到达Pod,但是当尝试通过其外部LoadBalancer IP或NodePort到达Pod时,我确实遇到了相同的延迟。 。当尝试从非群集节点上的计算机(例如,使用LoadBalancer或NodePort)访问注册表时,除了预期的网络延迟外,没有其他延迟。
实际上,我主要的询问是做什么是我尝试做的“正确”方法?此外,作为一个学术问题,我还想知道我所看到的很长很长时间的延误的根源吗?
我的部署yaml文件已包含在下面以供参考。入口处理程序是ingress-nginx。
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: registry-pv-claim
namespace: docker-registry
labels:
app: registry
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-registry
namespace: docker-registry
spec:
replicas: 1
selector:
matchLabels:
app: docker-registry
template:
metadata:
labels:
app: docker-registry
spec:
containers:
- name: docker-registry
image: registry:2.7.1
env:
- name: REGISTRY_HTTP_ADDR
value: ":5000"
- name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
value: "/var/lib/registry"
ports:
- name: http
containerPort: 5000
volumeMounts:
- name: image-store
mountPath: "/var/lib/registry"
volumes:
- name: image-store
persistentVolumeClaim:
claimName: registry-pv-claim
---
kind: Service
apiVersion: v1
metadata:
name: docker-registry
namespace: docker-registry
labels:
app: docker-registry
spec:
selector:
app: docker-registry
ports:
- name: http
port: 5000
targetPort: 5000
---
apiVersion: v1
items:
- apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
kubernetes.io/ingress.class: docker-registry
name: docker-registry
namespace: docker-registry
spec:
rules:
- host: example-registry.com
http:
paths:
- backend:
serviceName: docker-registry
servicePort: 5000
path: /
tls:
- hosts:
- example-registry.com
secretName: tls-secret
答案 0 :(得分:1)