k8s无法访问service

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 失败,则说明可能存在网络故障或其他低级问题,需要进一步排查。

希望这些信息能帮助你解决问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢