首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从部署docker的kubernetes集群中使用docker注册表

从部署docker的kubernetes集群中使用docker注册表
EN

Stack Overflow用户
提问于 2020-04-15 03:56:32
回答 1查看 94关注 0票数 0

我有一个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。

代码语言:javascript
复制
---
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 16:21:23

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61216112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档