k8s集群搭建,我使用几台物理机搭建了集群,测试init容器机制,遇到无法发现服务的情况。init容器文件如下:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
两个service也启动了,以myservice为例
kind: Service
apiVersion: v1
metadata:
name: myservice
namespace: default
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
service启动情况如下:
root@cmditower1:/etc/kubernetes# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d
mydb ClusterIP 10.96.61.73 <none> 80/TCP 2d
myservice ClusterIP 10.96.159.161 <none> 80/TCP 46h
启动了init容器文件后一直显示Init,查看对应的init-myservice,显示如下:
Name: myservice.default.svc.cluster.local
Address: 10.96.159.161
waiting for myservice
Server: 10.96.0.10
Address: 10.96.0.10:53
** server can't find myservice.cmdi6: NXDOMAIN
Name: myservice.default.svc.cluster.local
Address: 10.96.159.161
** server can't find myservice.svc.cluster.local: NXDOMAIN
** server can't find myservice.svc.cluster.local: NXDOMAIN
** server can't find myservice.cmdi6: NXDOMAIN
** server can't find myservice.cluster.local: NXDOMAIN
** server can't find myservice.cluster.local: NXDOMAIN
waiting for myservice
似乎是DNS解析的问题,网上查了很多也没解决
需要确认下其他Pod是否能够解析myservice这个服务。如果其他Pod也无法解析myservice,需要检查下Kubernetes集群中的DNS配置是否正确。如果其他Pod可以解析myservice,需要检查下这个Pod所在的节点是否有网络问题,例如节点上的DNS配置是否正确
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你提供的信息,似乎有几个潜在问题可能导致无法访问 myservice
服务。
首先,确保 myservice
服务的 DNS 解析记录是正确的。你可以在任何一个 Pod 中执行 nslookup myservice
命令来检查服务的 DNS 解析是否正确。如果 DNS 解析失败,则说明该服务的 DNS 解析记录可能有问题,需要检查 Service 和 Endpoint 是否正确配置。你可以使用 kubectl get svc myservice -o yaml
命令来获取 Service 的详细信息,使用 kubectl get ep myservice -o yaml
命令来获取 Endpoint 的详细信息。
其次,确保 myapp-pod
Pod 所处的节点可以访问 myservice
服务。你可以在 myapp-pod
Pod 中使用 curl http://myservice
命令来测试是否可以访问该服务。如果访问失败,则需要检查网络策略是否正确配置,以及是否存在防火墙等问题。
最后,如果上述问题都没有解决无法访问 myservice
服务的问题,可以尝试在 myapp-pod
Pod 中使用 kubectl exec
命令进入 Pod 内部,然后使用 ping myservice
命令来测试是否可以访问该服务。如果 Ping 失败,则说明可能存在网络故障或其他低级问题,需要进一步排查。
希望这些信息能帮助你解决问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢