为什么我无法使用格式 http://<ip_with_dashes>.<namespace>.pod.cluster.local 访问另一个名称空间中的 pod?
Why can't I reach a pod in another namespace using the format http://<ip_with_dashes>.<namespace>.pod.cluster.local?
我在其中创建了一个命名空间和一个 pod,如下所示:
# Create the namespace
kubectl create namespace one
# Create the pod (NOTE - Without a service)
kubectl run rest -n one --image nginx --labels app=rest --expose --port 80
然后我创建了第二个命名空间和 pod(我将使用它来访问第一个)。
# Create the namespace
kubectl create namespace two
# Create the pod (NOTE - Without a service)
kubectl run call-rest -n two --image alpine -- sleep 3600
然后我抓取第一个pod的ip地址:
kubectl get pod rest -n one -o wide
# This gives me
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# rest 1/1 Running 0 10m 192.168.0.142 k3d-dev-server-0 <none> <none>
我使用该 ip 地址从另一个 pod 调用它。
# This uses the format that K8s creates for DNS
kubectl exec -it call-rest -n two -- wget -qO- --timeout=2 http://192-168-0-142.one.pod.cluster.local
以上只是超时
wget: download timed out
command terminated with exit code 1
为了验证,我检查了集群的域,我的域是正确的:
# Run this inside the pod
kubectl exec -it call-rest -n two -- cat /etc/resolv.conf
# And it prints out:
#
# search two.svc.cluster.local svc.cluster.local cluster.local
# nameserver 10.43.0.10
# options ndots:5
如果 pods 在同一个命名空间中,它们可以相互访问(但这样我就不需要使用 ip 地址了)。
知道如何让它们相互联系吗?
我正在使用:
- k3d版本v4.4.1
- k3s 版本 v1.20.5-k3s1(默认)
- 印花布
原来这是因为我使用的是 Calico。使用 k3d 中使用的默认 Flannel,上述 确实 有效。但是,在 Calico 中,它会为 pods 创建集群范围的 IP 地址,而不是每个命名空间内的 IP。所以以下工作:
kubectl exec -it call-rest -n two -- wget -qO- --timeout=2 http://192.168.0.142
我在其中创建了一个命名空间和一个 pod,如下所示:
# Create the namespace
kubectl create namespace one
# Create the pod (NOTE - Without a service)
kubectl run rest -n one --image nginx --labels app=rest --expose --port 80
然后我创建了第二个命名空间和 pod(我将使用它来访问第一个)。
# Create the namespace
kubectl create namespace two
# Create the pod (NOTE - Without a service)
kubectl run call-rest -n two --image alpine -- sleep 3600
然后我抓取第一个pod的ip地址:
kubectl get pod rest -n one -o wide
# This gives me
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# rest 1/1 Running 0 10m 192.168.0.142 k3d-dev-server-0 <none> <none>
我使用该 ip 地址从另一个 pod 调用它。
# This uses the format that K8s creates for DNS
kubectl exec -it call-rest -n two -- wget -qO- --timeout=2 http://192-168-0-142.one.pod.cluster.local
以上只是超时
wget: download timed out
command terminated with exit code 1
为了验证,我检查了集群的域,我的域是正确的:
# Run this inside the pod
kubectl exec -it call-rest -n two -- cat /etc/resolv.conf
# And it prints out:
#
# search two.svc.cluster.local svc.cluster.local cluster.local
# nameserver 10.43.0.10
# options ndots:5
如果 pods 在同一个命名空间中,它们可以相互访问(但这样我就不需要使用 ip 地址了)。
知道如何让它们相互联系吗?
我正在使用:
- k3d版本v4.4.1
- k3s 版本 v1.20.5-k3s1(默认)
- 印花布
原来这是因为我使用的是 Calico。使用 k3d 中使用的默认 Flannel,上述 确实 有效。但是,在 Calico 中,它会为 pods 创建集群范围的 IP 地址,而不是每个命名空间内的 IP。所以以下工作:
kubectl exec -it call-rest -n two -- wget -qO- --timeout=2 http://192.168.0.142