gpt4 book ai didi

Kubernetes pod 无法使用 ClusterIP 相互 ping 通

转载 作者:行者123 更新时间:2023-12-02 11:33:08 33 4
gpt4 key购买 nike

我正在尝试使用分配给 kube-dns 服务的集群 IP 从 dnstools pod ping kube-dns 服务。 ping 请求超时。在同一个 dnstools pod 中,我尝试使用暴露的端口来 curl kube-dns 服务,但也超时了。

以下是 kubectl get pods --all-namespaces -o wide 的输出

NAMESPACE       NAME                                      READY   STATUS    RESTARTS   AGE     IP             NODE          NOMINATED NODE
default pod/busybox 1/1 Running 62 2d14h 192.168.1.37 kubenode <none>
default pod/dnstools 1/1 Running 0 2d13h 192.168.1.45 kubenode <none>
default pod/nginx-deploy-7c45b84548-ckqzb 1/1 Running 0 6d11h 192.168.1.5 kubenode <none>
default pod/nginx-deploy-7c45b84548-vl4kh 1/1 Running 0 6d11h 192.168.1.4 kubenode <none>
dmi pod/elastic-deploy-5d7c85b8c-btptq 1/1 Running 0 2d14h 192.168.1.39 kubenode <none>
kube-system pod/calico-node-68lc7 2/2 Running 0 6d11h 10.62.194.5 kubenode <none>
kube-system pod/calico-node-9c2jz 2/2 Running 0 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/coredns-5c98db65d4-5nprd 1/1 Running 0 6d12h 192.168.0.2 kubemaster <none>
kube-system pod/coredns-5c98db65d4-5vw95 1/1 Running 0 6d12h 192.168.0.3 kubemaster <none>
kube-system pod/etcd-kubemaster 1/1 Running 0 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/kube-apiserver-kubemaster 1/1 Running 0 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/kube-controller-manager-kubemaster 1/1 Running 1 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/kube-proxy-9hcgv 1/1 Running 0 6d11h 10.62.194.5 kubenode <none>
kube-system pod/kube-proxy-bxw9s 1/1 Running 0 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/kube-scheduler-kubemaster 1/1 Running 1 6d12h 10.62.194.4 kubemaster <none>
kube-system pod/tiller-deploy-767d9b9584-5k95j 1/1 Running 0 3d9h 192.168.1.8 kubenode <none>
nginx-ingress pod/nginx-ingress-66wts 1/1 Running 0 5d17h 192.168.1.6 kubenode <none>

在上面的输出中,为什么有些 Pod 在 192.168.0.0/24 中分配了一个 IP子网而其他人的 IP 等于我的节点/主节点的 IP 地址? (10.62.194.4是我master的IP,10.62.194.5是我节点的IP)

这是 config.yml我曾经使用 kubeadm init --config=config.yml 初始化集群
apiServer:
certSANs:
- 10.62.194.4
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: dev-cluster
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
networking:
dnsDomain: cluster.local
podSubnet: 192.168.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
kubectl get svc --all-namespaces -o wide 的结果
NAMESPACE     NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE     SELECTOR
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d12h <none>
default service/nginx-deploy ClusterIP 10.97.5.194 <none> 80/TCP 5d17h run=nginx
dmi service/elasticsearch ClusterIP 10.107.84.159 <none> 9200/TCP,9300/TCP 2d14h app=dmi,component=elasticse
dmi service/metric-server ClusterIP 10.106.117.2 <none> 8098/TCP 2d14h app=dmi,component=metric-se
kube-system service/calico-typha ClusterIP 10.97.201.232 <none> 5473/TCP 6d12h k8s-app=calico-typha
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d12h k8s-app=kube-dns
kube-system service/tiller-deploy ClusterIP 10.98.133.94 <none> 44134/TCP 3d9h app=helm,name=tiller

我运行的命令是 kubectl exec -ti dnstools -- curl 10.96.0.10:53
编辑:

我提出这个问题是因为我在尝试从集群内解析服务名称时遇到了这个错误。我的印象是我收到此错误,因为我无法从 pod ping DNS 服务器。
kubectl exec -ti dnstools -- nslookup kubernetes.default 的输出
;; connection timed out; no servers could be reached

command terminated with exit code 1
kubectl exec dnstools cat /etc/resolv.conf 的输出
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local reddog.microsoft.com
options ndots:5
kubectl get ep kube-dns --namespace=kube-system 的结果
NAME       ENDPOINTS                                                  AGE
kube-dns 192.168.0.2:53,192.168.0.3:53,192.168.0.2:53 + 3 more... 6d13h

编辑:
直接使用其 Pod IP ping CoreDNS Pod 也会超时:
/ # ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2): 56 data bytes
^C
--- 192.168.0.2 ping statistics ---
24 packets transmitted, 0 packets received, 100% packet loss

编辑:
我认为在设置集群时出了点问题。以下是我在设置集群时采取的步骤:
  • 编辑 master 和 worker 上的主机文件以包含节点的 IP 和主机名
  • 使用 swapoff -a 禁用交换并通过编辑 /etc/fstab 永久禁用交换
  • 使用 apt-get install apt-transport-https ca-certificates curl software-properties-common -y 安装 docker 先决条件
  • 使用 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 添加了 Docker GPG key
  • 使用 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 添加了 Docker 存储库
  • 使用 apt-get update -y; -get install docker-ce -y 安装 Docker
  • 使用 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 安装 Kubernetes 先决条件
  • 使用 echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list 添加了 Kubernetes 存储库
  • 使用 apt-get update -y; apt-get install kubelet kubeadm kubectl -y 更新 repo 并安装 Kubernetes 组件

  • 配置主节点:
  • kubeadm init --apiserver-advertise-address=10.62.194.4 --apiserver-cert-extra-sans=10.62.194.4 --pod-network-cidr=192.168.0.0/16
  • 将 Kube 配置复制到 $HOME :mkdir -p $HOME/.kube; sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config; sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 使用 kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml; kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml 安装 Calico

  • 在节点上:
    在节点上我做了 kubeadm join命令使用从 kubeadm token create --print-join-command 打印出来的命令在主人身上

    最佳答案

    kubernetes 系统 pod 被分配了主机 ip,因为它们提供不依赖于覆盖网络的低级服务(或者在 calico 的情况下甚至提供覆盖网络)。他们有他们运行的节点的IP。

    一个普通的 pod 使用覆盖网络并从 calico 范围分配一个 ip,而不是从它们运行的​​金属节点。

    您无法使用 curl 通过 HTTP 访问 DNS(端口 53)。您可以使用 dig查询 DNS 解析器。
    ping 无法访问服务 IP,因为它是一个虚拟 IP,仅用作 kube-proxy 设置的 iptables 规则的路由句柄,因此 TCP 连接有效,但 ICMP 无效。
    不过,您可以 ping 一个 pod IP,因为它是从覆盖网络分配的。

    关于Kubernetes pod 无法使用 ClusterIP 相互 ping 通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248860/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com