3

我的集群包括:1 个主节点和 2 个工作节点。我使用部署 yaml 创建了一个 pod。pod 在工作节点 1 上运行成功,我可以在工作节点上 ping pod 的 ip,但我无法在 master 上 ping pod 的 ip 地址。我试图禁用firewarlld,重新启动docker但没有成功。请看我的命令

[root@k8s-master ~]# kubectl get pods -o wide | grep qldv
qldv-liberty-8499dfcf67-55njr   1/1     Running             0          6m42s   10.40.0.2    worker-node1   <none>           <none>

[root@k8s-master ~]# ping 10.40.0.2
PING 10.40.0.2 (10.40.0.2) 56(84) bytes of data.
From 10.32.0.1 icmp_seq=1 Destination Host Unreachable
From 10.32.0.1 icmp_seq=2 Destination Host Unreachable
From 10.32.0.1 icmp_seq=3 Destination Host Unreachable

[root@k8s-master ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k8s-master     Ready    master   43d   v1.15.0
worker-node1   Ready    <none>   42d   v1.15.0
worker-node2   Ready    <none>   42d   v1.15.0


[root@k8s-master ~]# kubectl describe pod qldv-liberty-8499dfcf67-55njr
Name:           qldv-liberty-8499dfcf67-55njr
Namespace:      default
Priority:       0
Node:           worker-node1/192.168.142.130
Start Time:     Sat, 17 Aug 2019 20:05:57 +0700
Labels:         app=qldv-liberty
                pod-template-hash=8499dfcf67
Annotations:    <none>
Status:         Running
IP:             10.40.0.2
Controlled By:  ReplicaSet/qldv-liberty-8499dfcf67
Containers:
  qldv-liberty:
    Container ID:   docker://03636fb62d4cca0e41f4ad9f5a94b50cf371089ab5a0813ed802d02f4ac4b07a
    Image:          qldv-liberty
    Image ID:       docker://sha256:bd0d7ce1c07da5b9d398131b17da7a6931a9b7ae0673d19a6ec0c409416afc69
    Port:           9080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 17 Aug 2019 20:06:23 +0700
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-vtphv (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-vtphv:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-vtphv
    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:
  Type    Reason     Age   From                   Message
  ----    ------     ----  ----                   -------
  Normal  Scheduled  119s  default-scheduler      Successfully assigned default/qldv-liberty-8499dfcf67-55njr to worker-node1
  Normal  Pulled     96s   kubelet, worker-node1  Container image "qldv-liberty" already present on machine
  Normal  Created    95s   kubelet, worker-node1  Created container qldv-liberty
  Normal  Started    91s   kubelet, worker-node1  Started container qldv-liberty

我有另一个应用程序,它还有一个在工作节点 1 上运行的 pod,我可以从 master ping pod 的 ip。但我不知道为什么上述情况是不可能的。请帮我 !

4

1 回答 1

0

我怀疑集群是否仍然存在,因此我最好分享一些故障排除技巧:

  1. 检查所有控制平面组件的状态和节点状态。确保kube-proxy和网络插件(flannel/calico/waive/etc)Pod 存在于每个节点上并处于Ready状态。
kubectl get deployments,daemonsets,pods,svc -A -o wide

        Kubernetes 集群有几个要求,值得检查是否满足。

        可以在控制平面组件日志中找到一些有用的信息,使用

kubectl logs kube-component-name-pod -n kube-system

        或kubelet使用日志

journalctl -u kubelet
  1. 最好使用众所周知的图像,例如nginxmendhak/http-https-echo。它们可以配置为侦听任何所需的端口,并在日志或 HTTP 回复中提供有关请求的详细信息。它有助于排除与应用程序/图像相关的问题。

  2. 首先检查同一节点内 Pod IP 和 Service ClusterIP 的连接。
    如果工作节点操作系统没有必要的故障排除工具(例如容器优化镜像或 coreOS),则可以使用带有 Ubuntu 或 Busybox 镜像的 Pod。创建 Deployment 或 DaemonSet 有助于在所有节点上调度它。请注意,防火墙或网络问题可能会阻止kubectl exec与该 pod 的连接。

  3. 如果在同一个节点内一切正常,但无法从另一个节点建立到 Pod 的连接,则值得检查网络插件状态和节点防火墙配置。本机 Linux 防火墙助手可以干扰由 kube-proxy 创建的 iptables 规则集并阻止连接。

        在公有云中创建的集群可能需要额外的路由、对等互连、云防火墙或安全组配置,以允许集群节点之间的完整 IPIP 连接,尤其是在不同 VPC 中创建的情况下。

  1. 接下来值得检查的是coredns/kube-dns健康。servicename.namespacename.svc.cluster.local他们假设使用他们的 pod IP 地址或 kube-dns 服务(在默认 kubeadm 集群配置中通常具有 IP 地址 10.96.0.10)请求解析以更正 IP 地址集群服务的名称 。

每个问题的解决方案都可以在 StackExchange 站点上的另一个答案中找到。官方文档是另一个重要的信息来源,也包含很好的示例。

于 2021-03-16T08:53:12.630 回答