首页 > 解决方案 > 创建的 Docker 注册表在集群内无法访问

问题描述

我在 aws 上使用 EKS 集群

我已将 docker 注册表创建为部署,然后在其上创建了一个 svc 和一个入口

在入口中,我为入口主机放置了 tls 机密

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/client-max-body-size: "0"
  creationTimestamp: "2021-06-18T05:10:02Z"
  generation: 1
  name: registry-ingress
  namespace: devops
  resourceVersion: "4126584"
  selfLink: /apis/extensions/v1beta1/namespaces/devops/ingresses/registry-ingress
  uid: d808177b-cb0b-4da2-82aa-5ab2f3c99109
spec:
  rules:
  - host: docker-registry.xxxx.com
    http:
      paths:
      - backend:
          serviceName: docker-registry
          servicePort: 5000
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - docker-registry.xxxx.com
    secretName: tls-registry

我有 4 个工作节点和一个跳转服务器我面临的问题是我能够从跳转主机访问入口地址上的 docker 注册表,但是从工作节点它失败并出现错误,所以当我使用注册表中的图像创建任何 pod 时他们也因以下错误而失败

Worker 和 Jump 主机在同一个子网中

request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

我尝试将服务 IP 和注册表入口主机放在 /etc/hosts 中,将证书复制到 /etc/docker.certs.d/registryname 。任何提示都会很棒

集群信息: Kubernetes 版本:v1.19.8-eks-96780e kubectl version o/p : Client Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.4-eks-6b7464" , GitCommit:"6b746440c04cb81db4426842b4ae65c3f7035e53", GitTreeState:"clean", BuildDate:"2021-03-19T19:35:50Z", GoVersion:"go1.15.8", 编译器:"gc", 平台:"linux/arm64"}

服务器版本:version.Info{Major:"1", Minor:"19+", GitVersion:"v1.19.8-eks-96780e",​​ GitCommit:"96780e1b30acbf0a52c38b6030d7853e575bcdf3", GitTreeState:"clean", BuildDate:"2021-03 -10T21:32:29Z",GoVersion:"go1.15.8",编译器:"gc",平台:"linux/amd64"}

正在使用的云:AWS

安装方式:EKS

编辑 1

我检查了一个工作节点以找到 CRI,kubelet 进程如下,所以我认为 CRI 是 docker

/usr/bin/kubelet --cloud-provider aws --config /etc/kubernetes/kubelet/kubelet-config.json --kubeconfig /var/lib/kubelet/kubeconfig --container-runtime docker

但我确实看到 dockerd 和 containerd 进程都在工作节点上运行。

同样在检查 docker 服务日志时,我也遇到了同样的错误。

Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-06-14 08:31:57 UTC; 4 days ago
Docs: https://docs.docker.com
Process: 12574 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
Process: 12571 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
Main PID: 12579 (dockerd)
Tasks: 23
Memory: 116.5M
CGroup: /system.slice/docker.service
└─12579 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Jun 19 02:23:45 ip-xxxxx dockerd[12579]: time=“2021-06-19T02:23:45.876987774Z” level=error msg=“Handler for POST /v1.40/images/create returned error: Get https://xxxx: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)”

标签: kuberneteskubernetes-ingressamazon-eksnginx-ingressdocker-registry

解决方案


推荐阅读