Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t解析另一个服务';我的Kubernetes Windows安装程序中的主机名_Kubernetes_Azure Container Service - Fatal编程技术网

Can';t解析另一个服务';我的Kubernetes Windows安装程序中的主机名

Can';t解析另一个服务';我的Kubernetes Windows安装程序中的主机名,kubernetes,azure-container-service,Kubernetes,Azure Container Service,我最近学习了如何将Kubernetes与Windows pods()结合使用的教程。我决定将示例扩展到两个服务,一个前端调用后面的一个。简化: 但现在,当我连接到一个前端节点时: kubectl exec -it samplefront-2836659004-4m824 -- powershell 我无法ping其他服务: PS C:\> ping sample-back Ping request could not find host sample-back. Please chec

我最近学习了如何将Kubernetes与Windows pods()结合使用的教程。我决定将示例扩展到两个服务,一个前端调用后面的一个。简化:

但现在,当我连接到一个前端节点时:

kubectl exec -it samplefront-2836659004-4m824 -- powershell
我无法ping其他服务:

PS C:\> ping sample-back
Ping request could not find host sample-back. Please check the name and try again.
我听说这可能是因为两个网络接口和错误的DNS服务器被选中,但我没有找到一种方法来指定部署中的任何内容

Windows IP Configuration


Ethernet adapter vEthernet (Container NIC 7baf5cc0):

Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::f182:e2e7:7bce:ed60%33
IPv4 Address. . . . . . . . . . . : 10.244.0.211
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.244.0.1

Ethernet adapter vEthernet (Container NIC ae765bad):

Connection-specific DNS Suffix  . : 10jheu23yh0ujpey5vzw0q45qg.ax.internal.cloudapp.net
Link-local IPv6 Address . . . . . : fe80::c4dc:b785:9cd:2a7b%37
IPv4 Address. . . . . . . . . . . : 172.31.245.122
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . : 172.31.240.1
无法解析Kubernetes中其他服务的主机名

这是一种按设计的行为。因为群集IP不存在

在Kubernetes中,集群中的所有服务都由kube代理处理。kube代理在集群中的每个节点上运行,它为每个服务编写的规则(Linux节点,与windows相同)。这些iptables规则管理流向服务ip的流量。他们实际上没有ICMP的任何规则,因为它不是必需的

但我们可以ping pod IP或pod的DNS

例如,我们可以使用此命令列出pods IP地址:

root@k8s-master-9F42C511-0:~# kubectl get pods -o wide
NAME                               READY     STATUS    RESTARTS   AGE       IP           NODE
azure-vote-back-3048739398-8zx8b   1/1       Running   0          18m       10.244.1.2   k8s-agent-9f42c511-0
azure-vote-front-837696400-tglpn   1/1       Running   0          18m       10.244.1.3   k8s-agent-9f42c511-0
root@k8s-master-9F42C511-0:~# kubectl exec -it azure-vote-front-837696400-tglpn -- /bin/bash
root@azure-vote-front-837696400-tglpn:/app# ping 10.244.1.3
PING 10.244.1.3 (10.244.1.3): 56 data bytes
64 bytes from 10.244.1.3: icmp_seq=0 ttl=64 time=0.063 ms
64 bytes from 10.244.1.3: icmp_seq=1 ttl=64 time=0.052 ms
^C--- 10.244.1.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.052/0.057/0.063/0.000 ms
root@azure-vote-front-837696400-tglpn:/app# ping 10.244.1.4
PING 10.244.1.4 (10.244.1.4): 56 data bytes
64 bytes from 10.244.1.4: icmp_seq=0 ttl=64 time=0.102 ms
64 bytes from 10.244.1.4: icmp_seq=1 ttl=64 time=0.098 ms
^C--- 10.244.1.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.098/0.100/0.102/0.000 ms
然后我们使用一个pod ping这些IP地址:

root@k8s-master-9F42C511-0:~# kubectl get pods -o wide
NAME                               READY     STATUS    RESTARTS   AGE       IP           NODE
azure-vote-back-3048739398-8zx8b   1/1       Running   0          18m       10.244.1.2   k8s-agent-9f42c511-0
azure-vote-front-837696400-tglpn   1/1       Running   0          18m       10.244.1.3   k8s-agent-9f42c511-0
root@k8s-master-9F42C511-0:~# kubectl exec -it azure-vote-front-837696400-tglpn -- /bin/bash
root@azure-vote-front-837696400-tglpn:/app# ping 10.244.1.3
PING 10.244.1.3 (10.244.1.3): 56 data bytes
64 bytes from 10.244.1.3: icmp_seq=0 ttl=64 time=0.063 ms
64 bytes from 10.244.1.3: icmp_seq=1 ttl=64 time=0.052 ms
^C--- 10.244.1.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.052/0.057/0.063/0.000 ms
root@azure-vote-front-837696400-tglpn:/app# ping 10.244.1.4
PING 10.244.1.4 (10.244.1.4): 56 data bytes
64 bytes from 10.244.1.4: icmp_seq=0 ttl=64 time=0.102 ms
64 bytes from 10.244.1.4: icmp_seq=1 ttl=64 time=0.098 ms
^C--- 10.244.1.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.098/0.100/0.102/0.000 ms
而且,我们可以看到这是一个记录。在kubernetes中,pod是一个记录,形式为
pod ip地址.my namespace.pod.cluster.local

例如,名称空间
default
中IP
1.2.3.4
为DNS名称
cluster.local
的pod将有一个条目:
1-2-3-4.default.pod.cluster.local

在我的实验室里,我的吊舱记录如下:

root@k8s-master-9F42C511-0:~# kubectl exec -it azure-vote-front-837696400-tglpn -- /bin/bash
root@azure-vote-front-837696400-tglpn:/app# ping 10-244-1-2.default.pod.cluster.local                                                                                                              
PING 10-244-1-2.default.pod.cluster.local (10.244.1.2): 56 data bytes
64 bytes from 10.244.1.2: icmp_seq=0 ttl=64 time=0.103 ms
64 bytes from 10.244.1.2: icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from 10.244.1.2: icmp_seq=2 ttl=64 time=0.096 ms
^C--- 10-244-1-2.default.pod.cluster.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.087/0.095/0.103/0.000 ms
所以,我们不能
ping集群IP地址,但是我们可以使用URL来测试它。我们可以ping pod的IP地址和记录


更新
对不起,我的错误,k8s A记录规则适用于Linux代理,但不适用于windows代理


有关windows server容器的详细信息,请参阅此项。

因此,在尝试了不同的方案后,我决定删除安装程序,然后重试,并指定特定版本的microsoft/iis。它成功了:

kripke:Documents/Projets/ScaledSample%kubectl exec-it samplefront-1226573881-21bbh——ping样本返回
使用32字节数据ping回样本[10.0.216.120]:

从10.0.216.120回复:bytes=32次您是否为
示例返回创建了服务?您能否运行
kubectl get svc
Yes,下面是输出:NAME CLUSTER-IP EXTERNAL-IP PORT年龄kubernetes 10.0.0.1 443/TCP 18h样本返回10.0.29.159 80/TCP 16h样本前10.0.14.181 104.47.148.161 80:31151/TCP 16hHey,我要相信你对服务的承诺。但我甚至无法获取pods的DNS:kripke:Documents/Projets/ScaledSample%kubectl exec samplefront-2836659004-4m824——ping 10.244.2.104 ping 10.244.2.104,数据量为32字节:回复自10.244.2.104:bytes=32次应该是10-244-2-104.default.pod.cluster.local对此表示抱歉。kripke:Documents/Projets/ScaledSample%kubectl exec samplefront-2836659004-4m824--ping 10-244-2-104.default.pod.cluster.local ping请求找不到主机10-244-2-104.default.pod.cluster.local。请检查名称并重试我可以做什么来排除故障?看起来我真的是第一个尝试使用Windows pods的人…@sebug为我的错误感到抱歉,我使用Linux代理进行了测试,它适用于Linux代理。但它不适用于windows,这是一个已知的限制,windows中没有网络命名空间,因此当前每个pod只支持一个容器,因此k8s a记录规则不适用于windows代理。所以我们应该使用ping IP地址来测试它。很抱歉:)@sebug我已经更新了我的答案,请检查一下,希望有帮助:)所以我的理解是,我需要创建一个无头服务,它有一个实际服务的选择器,并使用该无头服务的名称作为主机名?(无头服务是一种不指定类型的服务)