问题描述
在一个 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。以上方法适用于一般情况,但具体情况可能有所不同。
希望对你有所帮助!
正文完