Kubernetes 中的集群 IP 是多少?
What is the cluster IP in Kubernetes?
我创建了一个包含三个节点的集群:一个主节点,两个小节点。
如何在 Kubernetes 中查看集群 IP?
是master节点的IP吗?
集群IP只分配给service,是Kubernetes的内网ip。
ClusterIP 可能意味着两件事:一种只能在 Kubernetes 集群中访问的服务类型,或 Kubernetes 中组件的内部 ("virtual") IP簇。假设您要询问有关查找集群内部 IP 的问题,可以通过 3 种方式访问它(使用 simple-nginx example):
通过命令行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
通过本地主机路由到我的集群):
$ 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"
}
]
}
}
}
通过 Kubernetes 容器中的 $<NAME>_SERVICE_HOST
环境变量(在本例中 my-nginx-yczg9
是集群中 pod 的名称):
$ kubectl exec my-nginx-yczg9 -- sh -c 'echo $MY_NGINX_SERVICE_HOST'
10.123.253.27
有关服务 IP 的更多详细信息可以在 Services in Kubernetes 文档中找到,前面提到的 simple-nginx example 是在集群外部公开服务的一个很好的例子使用 LoadBalancer
服务类型。
运行这个
$ kubectl cluster-info
它显示这样的结果,您可以在其中看到 Kubernetes 主 IP
集群IP是K8s分配给服务的虚拟IP。是K8s的内网IP。
集群 IP 使其可以从 Kubernetes 集群的任何节点访问。为此目的使用虚拟 IP 地址可以让多个 pods 在同一节点上公开同一端口 – 所有这些 pods 都可以通过唯一的 IP 地址访问。
这个 IP 是稳定的,在服务生命周期中永远不会改变(除非明确删除)。
2 个不同的 pods 可以使用此 IP 进行通信,但我建议使用集群 DNS 服务。
我创建了一个包含三个节点的集群:一个主节点,两个小节点。 如何在 Kubernetes 中查看集群 IP? 是master节点的IP吗?
集群IP只分配给service,是Kubernetes的内网ip。
ClusterIP 可能意味着两件事:一种只能在 Kubernetes 集群中访问的服务类型,或 Kubernetes 中组件的内部 ("virtual") IP簇。假设您要询问有关查找集群内部 IP 的问题,可以通过 3 种方式访问它(使用 simple-nginx example):
通过命令行
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
通过本地主机路由到我的集群):$ 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" } ] } } }
通过 Kubernetes 容器中的
$<NAME>_SERVICE_HOST
环境变量(在本例中my-nginx-yczg9
是集群中 pod 的名称):$ kubectl exec my-nginx-yczg9 -- sh -c 'echo $MY_NGINX_SERVICE_HOST' 10.123.253.27
有关服务 IP 的更多详细信息可以在 Services in Kubernetes 文档中找到,前面提到的 simple-nginx example 是在集群外部公开服务的一个很好的例子使用 LoadBalancer
服务类型。
运行这个
$ kubectl cluster-info
它显示这样的结果,您可以在其中看到 Kubernetes 主 IP
集群IP是K8s分配给服务的虚拟IP。是K8s的内网IP。
集群 IP 使其可以从 Kubernetes 集群的任何节点访问。为此目的使用虚拟 IP 地址可以让多个 pods 在同一节点上公开同一端口 – 所有这些 pods 都可以通过唯一的 IP 地址访问。
这个 IP 是稳定的,在服务生命周期中永远不会改变(除非明确删除)。
2 个不同的 pods 可以使用此 IP 进行通信,但我建议使用集群 DNS 服务。