我有一个on-prem kubernetes集群,我想在其中部署一个docker注册表,集群节点可以从中下载镜像。在尝试这样做的过程中,我尝试了几种识别服务的方法: NodePort,MetalLB在Layer2模式下提供的LoadBalancer,它的Flannel网络IP (指的是默认情况下位于10.244.0.0/16网络上的IP ),以及它的集群IP (指的是默认情况下位于10.96.0.0/16网络上的IP )。在任何情况下,通过docker连接到注册表都会失败。
我对IP执行了cURL,并意识到当请求按预期进行解析时,tcp拨号步骤始终需要63.15 +/- 0.05秒,随后HTTP(s)请求本身在tcp拨号的误差范围内完成。这在部署中是一致的,防火墙规则从相对严格的设置到除了kubernetes直接添加的规则之外什么都没有。它在网络体系结构中也是一致的,从具有用于所有群集节点的虚拟机的单个物理服务器,到用于每个节点和物理交换机的不同物理硬件。正如前面提到的,它在公开服务的方式上也是一致的。无论我是使用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发布于 2020-04-30 16:21:23
https://stackoverflow.com/questions/61216112
复制相似问题