如何确定 Kubernetes API 服务器所在的物理 IP

76次阅读
没有评论

问题描述

在一个 Kubernetes 集群中,有一个 Docker 网络 IP,看起来是 API 服务器的 IP。但是,不确定如何确定它所在的物理 IP 和位置。
如果有关于如何进行下一步操作的指导,将不胜感激。我已经接手了这个系统,但没有任何信息。

$ curl https://172.30.0.1
{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/apps",
    "/apis/apps/v1beta1",
    ...
  ]
}
$ kubectl get pods -o wide
NAME                    READY     STATUS    RESTARTS   AGE       IP
logging-fluentd-2vc4v   1/1       Running   0          1d        10.1.13.155
logging-fluentd-bvdtz   1/1       Running   0          1d        10.1.3.3
logging-fluentd-xvxrk   1/1       Running   0          1d        10.1.10.71
$ sudo iptables -t nat -L -n
Chain KUBE-SERVICES (2 references)
target                     prot opt source               destination
....
KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            172.30.0.1           /* default/kubernetes:https cluster IP */ tcp dpt:443
KUBE-SVC-BA6I5HTZKAAAJT56  tcp  --  0.0.0.0/0            172.30.0.1           /* default/kubernetes:dns-tcp cluster IP */ tcp dpt:53
....
$ ip route
default via 10.0.4.1 dev eth0 proto static metric 100
10.0.4.0/22 dev eth0 proto kernel scope link src 10.0.4.21 metric 100
10.1.0.0/16 dev tun0 proto kernel scope link
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.30.0.0/16 dev tun0 scope link

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在 Kubernetes 中,API 服务器运行在主节点上。要获取所有主节点的 IP 地址列表,可以使用以下命令:

kubectl -n kube-system get po | grep -i apiserver | cut -f1 -d" " | xargs kubectl -n kube-system get po $1 -o=jsonpath="{.items[*].status.hostIP}"

根据你运行的 Kubernetes 版本,可能需要更新 jsonPath 参数中 hostIP 的位置。

方案2

在 Kubernetes 1.20 上,可以使用以下命令获取 API 服务器的 IP 地址:

kubectl -n kube-system get pod -l component=kube-apiserver -o=jsonpath="{.items[0].metadata.annotations.kubeadm\.kubernetes\.io/kube-apiserver\.advertise-address\.endpoint}"

以上是两种确定 Kubernetes API 服务器所在物理 IP 的方法。

请注意,根据你的集群配置和网络设置,可能会有其他方法来确定 API 服务器的物理 IP。以上方法适用于一般情况,但具体情况可能有所不同。

希望对你有所帮助!

正文完