Kubernetes 中的集群 IP 是啥?
Posted
技术标签:
【中文标题】Kubernetes 中的集群 IP 是啥?【英文标题】:What is the cluster IP in Kubernetes?Kubernetes 中的集群 IP 是什么? 【发布时间】:2016-01-29 04:56:02 【问题描述】:我创建了一个由三个节点组成的集群:一个主节点,两个小节点。 如何在 Kubernetes 中查看集群 IP? 是主节点的IP吗?
【问题讨论】:
“集群 IP”是什么意思?你的用例是什么? 正在尝试通过以下链接实现服务类型负载均衡器:kubernetes.io/v1.0/docs/user-guide/services.html,它要求提供 cluster-ip。 【参考方案1】:集群IP只分配给服务,是Kubernetes的内部ip。
【讨论】:
【参考方案2】:ClusterIP 可能意味着两件事:一种只能在 Kubernetes 集群内访问的服务,或者 Kubernetes 集群内组件的内部(“虚拟”)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
来通过 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"
]
通过 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 get endpoints
获得它们?
@IvanAracki kubectl get endpoints 为您提供 pod IP 而不是服务端点,
大概第二个链接(现在坏了)应该更新为kubernetes.io/docs/concepts/services-networking/service【参考方案3】:
运行这个
$ kubectl cluster-info
它显示这样的结果,您可以在其中看到 Kubernetes 主 IP
【讨论】:
这个答案是我的期望之一。谢谢!【参考方案4】:Cluster IP 是 K8s 分配给服务的虚拟 IP。是K8s内部IP。
集群 IP 使其可以从任何 Kubernetes 集群的节点访问。为此目的使用虚拟 IP 地址可以让多个 pod 在同一个节点上公开相同的端口——所有这些 pod 都可以通过唯一的 IP 地址访问。
这个 IP 是稳定的,在服务生命周期内永远不会改变(除非明确删除)。
2 个不同的 pod 可以使用此 IP 进行通信,但我建议使用集群 DNS 服务。
【讨论】:
我们可以在不购买外部 dns 名称的情况下为集群 IP 分配名称吗?能否建议您实现这一目标? 我尝试从我在 minikube 中的一个 pod ping & traceroute 到 cluster-ip,但两个命令都没有成功。我也尝试过“minikube ssh”,然后运行 ping 和 traceroute(在安装 iputils-ping 和 traceroute 包之后),但也没有成功。我在这里有什么遗漏吗?以上是关于Kubernetes 中的集群 IP 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Kubernetes部署_02_从零开始搭建k8s集群v1.21.0(亲测可用)
Kubernetes部署_02_从零开始搭建k8s集群v1.21.0(亲测可用)