1. 使用 kubectl cluster-info 命令
这个命令会显示 Kubernetes API Server 的地址:
kubectl cluster-info
示例输出:
Kubernetes control plane is running at https://172.20.0.1:6443
CoreDNS is running at https://172.20.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
在上面的输出中,https://172.20.0.1:6443 就是 API Sever 的地址和端口(通常是 6443)。
2. 查看 Kubernetes 配置文件(kubeconfig 文件)
你可以查看你的 kubeconfig 文件,它通常位于 ~/.kube/config,这个文件中包含了 API Server 的地址和端口信息。
cat ~/.kube/config
你将会看到类似如下的配置:
clusters:
- cluster:
certificate-authority-data: ...
server: https://172.20.0.1:6443 # 这里是 API Server 地址和端口
name: kubernetes
3. 通过环境变量查询(在 Pod 内)
如果你在 Kubernetes Pod 内部,并且想要查看 API Server 的地址和端口,你可以检查环境变量:
env | grep KUBERNETES_SERVICE
你将看到类似的结果:
KUBERNETES_SERVICE_HOST=172.20.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://172.20.0.1:443
KUBERNETES_SERVICE_HOST 是 API Server 的 IP 地址。
KUBERNETES_SERVICE_PORT 是 API Server 的端口(通常是 443 或 6443)
3.1 kubectl cluster-info 地址和po内的KUBERNETES_SERVICE_HOST环境变量值不同,他们的关系是什么
二者的关系:
- 外部客户端(kubectl cluster-info):显示的是集群外部访问 Kubernetes API Server 的地址,通常是一个控制平面的 IP 地址或负载均衡器的地址。
- Pod 内(KUBERNETES_SERVICE_HOST):这个是集群内部通过 Kubernetes Service(kubernetes 服务)访问 API Server 的 ClusterIP。所有的 Pod 都会通过这个 ClusterIP 访问 API Server,而不是直接访问 API Server 的实际 IP。
为什么不同?
-
访问场景不同:
kubectl cluster-info 输出的地址用于外部客户端与 API Server 交互,可能通过负载均衡器或特定的网络入口来确保外部访问的高可用性。
KUBERNETES_SERVICE_HOST 是 Kubernetes 为内部 Pod 提供的一个服务入口,用于集群内部通信。这个地址通常是集群的虚拟 IP,由 Kubernetes Service 提供,而不是 API Server 的实际地址。 -
网络拓扑不同:
集群外部访问:客户端使用的是 API Server 的公开地址,这个地址可能是负载均衡器、控制平面节点的 IP 地址等。
集群内部访问:通过 Kubernetes 服务机制,集群中的每个 Pod 都可以使用 KUBERNETES_SERVICE_HOST 来访问 API Server 的内部地址,保持集群内部通信的稳定性。