我创建了一个由三个节点组成的集群:一个主节点,两个小节点。如何在 Kubernetes 中查看集群 IP?是主节点的IP吗?
4 回答
ClusterIP可能意味着两件事:一种只能在 Kubernetes 集群内访问的服务,或者 Kubernetes 集群内组件的内部(“虚拟”)IP。假设您要查找集群的内部 IP,可以通过 3 种方式访问它(使用simple-nginx 示例):
通过命令行
kubectl
实用程序:$ kubectl describe service my-nginx Name: my-nginx Namespace: default Labels: run=my-nginx Selector: run=my-nginx Type: LoadBalancer IP: 10.123.253.27 LoadBalancer Ingress: 104.197.129.240 Port: <unnamed> 80/TCP NodePort: <unnamed> 30723/TCP Endpoints: 10.120.0.6:80 Session Affinity: None No events.
通过 kubernetes API(这里我曾经
kubectl proxy
通过 localhost 路由到我的集群):$ kubectl proxy & $ curl -G http://localhost:8001/api/v1/namespaces/default/services/my-nginx { "kind": "Service", "apiVersion": "v1", "metadata": <omitted>, "spec": { "ports": [ { "protocol": "TCP", "port": 80, "targetPort": 80, "nodePort": 30723 } ], "selector": { "run": "my-nginx" }, "clusterIP": "10.123.253.27", "type": "LoadBalancer", "sessionAffinity": "None" }, "status": { "loadBalancer": { "ingress": [ { "ip": "104.197.129.240" } ] } } }
通过
$<NAME>_SERVICE_HOST
Kubernetes 容器中的环境变量(在此示例my-nginx-yczg9
中是集群中的 pod 的名称):$ kubectl exec my-nginx-yczg9 -- sh -c 'echo $MY_NGINX_SERVICE_HOST' 10.123.253.27
有关服务 IP 的更多详细信息可以在 Kubernetes文档中的服务中找到,前面提到的simple-nginx 示例LoadBalancer
是使用服务类型在集群外部公开服务的一个很好的示例。
Cluster IP 是 K8s 分配给服务的虚拟 IP。是K8s内部IP。
集群 IP 使其可以从任何 Kubernetes 集群的节点访问。为此目的使用虚拟 IP 地址可以让多个 pod 在同一个节点上公开相同的端口——所有这些 pod 都可以通过唯一的 IP 地址访问。
这个 IP 是稳定的,在服务生命周期内永远不会改变(除非明确删除)。
2 个不同的 pod 可以使用此 IP 进行通信,但我建议使用集群 DNS 服务。
集群IP只分配给服务,是Kubernetes的内部IP。