没有这样的主机:Docker守护进程可以';t访问kubernetes注册表,但同一节点上的wget可以连接到注册表

没有这样的主机:Docker守护进程可以';t访问kubernetes注册表,但同一节点上的wget可以连接到注册表,docker,kubernetes,alpine,Docker,Kubernetes,Alpine,我在单节点kubernetes集群上有一个基于Alpine Linux的节点(用于测试)。我在集群中的docker注册表中安装了一个私有docker注册表。默认值:5000。我可以登录到alpine节点并使用wget访问我的私人docker注册表 kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh / # wget -qO- https://docker:mypassword@docker-registry.defa

我在单节点kubernetes集群上有一个基于Alpine Linux的节点(用于测试)。我在集群中的
docker注册表中安装了一个私有docker注册表。默认值:5000
。我可以登录到alpine节点并使用
wget
访问我的私人docker注册表

kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # wget -qO- https://docker:mypassword@docker-registry.default:5000/v2/_catalog
{"repositories":["nuclio/processor-helloworld3"]}
docker login -u my_hub_user  -p my_hub_password
Login Succeeded
但我似乎无法使用同一个吊舱上的docker访问它。客户端和服务器都是2019版本

kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh

/ # which docker
/usr/local/bin/docker
/ # docker login -u docker -p mypassword docker-registry.default:5000
Error response from daemon: Get https://docker-registry.default:5000/v2/: dial tcp: lookup docker-registry.default on 169.254.169.254:53: no such host
我可以登录到Docker Hub注册表

kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # wget -qO- https://docker:mypassword@docker-registry.default:5000/v2/_catalog
{"repositories":["nuclio/processor-helloworld3"]}
docker login -u my_hub_user  -p my_hub_password
Login Succeeded
编辑:

在kubectl描述的nuclio-dashboard-5c5c48947b-lpgx8舱上,我们得到

kd pod/nuclio-dashboard-5c5c48947b-2dpnz
Name:           nuclio-dashboard-5c5c48947b-2dpnz
Namespace:      nuclio
Priority:       0
Node:           gke-your-first-cluster-1-pool-1-fe915942-506h/10.128.0.30
Start Time:     Tue, 31 Dec 2019 09:39:45 -0500
Labels:         app=nuclio
                nuclio.io/app=dashboard
                nuclio.io/class=service
                nuclio.io/name=nuclio-dashboard
                pod-template-hash=5c5c48947b
                release=nuclio
Annotations:    nuclio.io/version: 1.3.4-amd64
Status:         Running
IP:             10.4.0.9
Controlled By:  ReplicaSet/nuclio-dashboard-5c5c48947b
Containers:
  nuclio-dashboard:
    Container ID:   docker://4f358607618f89da911e191226313193e38ed5335a3e46c207eee16669f1dd46
    Image:          quay.io/nuclio/dashboard:1.3.4-amd64
    Image ID:       docker-pullable://quay.io/nuclio/dashboard@sha256:e6d94f7bf46601b2454a9e73ba292c62edac3d4684ea15057855af2277eab8a5
    Port:           8070/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 31 Dec 2019 09:40:27 -0500
    Ready:          True
    Restart Count:  0
    Environment:
      NUCLIO_DASHBOARD_REGISTRY_URL:                <set to the key 'registry_url' of config map 'nuclio-registry-url'>  Optional: true
      NUCLIO_DASHBOARD_DEPLOYMENT_NAME:             nuclio-dashboard
      NUCLIO_CONTAINER_BUILDER_KIND:                docker
      NUCLIO_DASHBOARD_EXTERNAL_IP_ADDRESSES:
      NUCLIO_DASHBOARD_HTTP_INGRESS_HOST_TEMPLATE:
    Mounts:
      /etc/nuclio/dashboard/registry-credentials from registry-credentials (ro)
      /var/run/docker.sock from docker-sock (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from nuclio-nuclio-token-d7fwp (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  docker-sock:
    Type:          HostPath (bare host directory volume)
    Path:          /var/run/docker.sock
    HostPathType:
  registry-credentials:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  nuclio-registry-credentials
    Optional:    true
  nuclio-nuclio-token-d7fwp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  nuclio-nuclio-token-d7fwp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>
kd吊舱/nuclio-dashboard-5c5c48947b-2dpnz
名称:nuclio-dashboard-5c5c48947b-2dpnz
名称空间:nuclio
优先级:0
节点:gke-your-first-cluster-1-pool-1-fe915942-506h/10.128.0.30
开始时间:2019年12月31日星期二09:39:45-0500
标签:app=nuclio
nuclio.io/app=仪表板
nuclio.io/class=服务
io/name=nuclio仪表板
pod模板哈希=5c5c48947b
释放=努克里奥
注释:nuclio.io/version:1.3.4-amd64
状态:正在运行
IP:10.4.0.9
控制人:ReplicaSet/nuclio-dashboard-5C48947B
容器:
nuclio仪表板:
容器ID:docker://4f358607618f89da911e191226313193e38ed5335a3e46c207eee16669f1dd46
图:码头io/nuclio/仪表板:1.3.4-amd64
图像ID:docker-pullable://quay.io/nuclio/dashboard@sha256:e6d94f7bf46601b2454a9e73ba292c62edac3d4684ea15057855af2277eab8a5
端口:8070/TCP
主机端口:0/TCP
状态:正在运行
开始时间:2019年12月31日星期二09:40:27-0500
准备好了吗
重新启动计数:0
环境:
NUCLIO_仪表板_注册表_URL:可选:true
NUCLIO_仪表板_部署_名称:NUCLIO仪表板
NUCLIO_集装箱_建造商_种类:码头工人
NUCLIO_仪表板_外部_IP_地址:
NUCLIO\u仪表板\u HTTP\u入口\u主机\u模板:
挂载:
/来自注册表凭据(ro)的etc/nuclio/dashboard/registry凭据
/var/run/docker.sock来自docker sock(rw)
/来自nuclio-nuclio-token-d7fwp(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
初始化为True
准备好了吗
集装箱准备好了吗
播客预定为真
卷数:
docker袜子:
类型:主机路径(裸主机目录卷)
路径:/var/run/docker.sock
主机路径类型:
注册表凭据:
类型:Secret(由Secret填充的卷)
SecretName:nuclio注册表凭据
可选:true
nuclio-nuclio-token-d7fwp:
类型:Secret(由Secret填充的卷)
秘密名称:nuclio-nuclio-token-d7fwp
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:不执行300秒
node.kubernetes.io/不可访问:不执行300秒
活动:

Kubernetes将把内部DNS服务器注入pod的/etc/resolv.conf文件。这就是为什么您可以从Pod访问注册表

通常,此DNS服务不会暴露在
Pod
网络之外

当您使用docker命令时,您在
主机内,主机将指向无法解析注册表内部服务名称的其他DNS服务器

kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # wget -qO- https://docker:mypassword@docker-registry.default:5000/v2/_catalog
{"repositories":["nuclio/processor-helloworld3"]}
docker login -u my_hub_user  -p my_hub_password
Login Succeeded
要从主机访问注册表,您需要以下信息

1) 将注册表
服务
公开为
节点端口
负载平衡器

(在测试环境中,请使用
NodePort


2) 创建正确的DNS条目以将名称解析为IP(在
NodePort
服务的情况下,IP将是节点的IP)。由于您只有一个节点,请在
/etc/hosts
文件中创建一个条目以解析注册表FQDN。

Kubernetes会将内部DNS服务器注入pod的/etc/resolv.conf文件。这就是为什么您可以从Pod访问注册表

通常,此DNS服务不会暴露在
Pod
网络之外

当您使用docker命令时,您在
主机内,主机将指向无法解析注册表内部服务名称的其他DNS服务器

kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # wget -qO- https://docker:mypassword@docker-registry.default:5000/v2/_catalog
{"repositories":["nuclio/processor-helloworld3"]}
docker login -u my_hub_user  -p my_hub_password
Login Succeeded
要从主机访问注册表,您需要以下信息

1) 将注册表
服务
公开为
节点端口
负载平衡器

(在测试环境中,请使用
NodePort


2) 创建正确的DNS条目以将名称解析为IP(在
NodePort
服务的情况下,IP将是节点的IP)。由于您只有一个节点,请在
/etc/hosts
文件中创建一个条目以解析注册表FQDN。

非常感谢。我已经更新了我的问题,因为它不清楚。在这两种情况下,我都登录到pod(即使是docker)。或者当我执行
kubectl exec-it pod/abc--/bin/sh
然后访问docker时不是这样吗?@RAbraham:
来自守护程序的错误响应
表示docker守护程序无法获取存储库。您的docker守护程序正在Pod内部或其主机上运行?您是否在pod中安装了docker套接字,然后试图访问存储库?我所做的是
kubectl exec-it pod/nuclio-dashboard-5c5c48947b-lpgx8--/bin/sh/#docker login-u docker-p mypassword docker注册表。默认值:5000
我认为这意味着守护进程正在pod中运行?我还没有将docker插座安装到pod@RAbraham:来自Pod的一个简单的
ps-ef | grep docker
可以证实这一点。
bash ps-ef | grep docker 8 root 0:15/usr/local/bin/dashboard——docker key dir/etc/nuclio/dashboard/registry credentials——如果术语“dashboard”看起来很混乱,pod由Nucl创建