Kubernetes中的集群IP是什么?

43

我已经创建了一个由三个节点组成的集群:一个主节点和两个从节点。如何在Kubernetes中检查集群IP?这是主节点的IP吗?


“Cluster IP”是什么意思?你的使用场景是什么? - Tim Allclair
尝试从以下链接实现服务类型的负载均衡器:http://kubernetes.io/v1.0/docs/user-guide/services.html,其中要求提供集群IP。 - Madhurima Mishra
5个回答

47
ClusterIP有两种含义:一种是在Kubernetes集群内部可访问的服务类型,另一种是Kubernetes集群内组件的内部("虚拟")IP。假设您正在寻找集群内部IP地址,可以通过以下3种方式之一访问它(使用simple-nginx实例):
  1. 通过命令行kubectl实用程序:
  2. $ 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.
    
  3. 通过 Kubernetes API(在这里我使用了kubectl proxy将其路由到本地主机以连接我的集群):

  4. $ 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"
            }
          ]
        }
      }
    }
    
  5. 通过 Kubernetes 容器内的 $<NAME>_SERVICE_HOST 环境变量(在此示例中,my-nginx-yczg9 是集群中 Pod 的名称):

  6. $ kubectl exec my-nginx-yczg9 -- sh -c 'echo $MY_NGINX_SERVICE_HOST'
    10.123.253.27
    
    更多有关服务IP的详细信息可以在Kubernetes中的服务文档中找到,而之前提到的LoadBalancer服务类型是将服务暴露到集群外部的好例子。

那么服务端点是什么?我们通过 kubectl get endpoints 命令获取它们吗? - Ivan Aracki
1
@IvanAracki kubectl get endpoints 命令会返回 Pod 的 IP 地址而不是服务的端点。 - Abhishek D K
假定第二个链接(现已失效)应更新为https://kubernetes.io/docs/concepts/services-networking/service/。 - YakovL

36

运行这个

$ kubectl cluster-info

它会显示类似于这样的结果,您可以看到Kubernetes 主节点 IP

Kubernetes 集群 IP


2
这个答案符合我的期望。谢谢! - Tung

12

Cluster IP是由K8s分配给服务的虚拟IP,它是K8s内部IP。

Cluster IP可以从Kubernetes集群中的任何节点访问。使用虚拟IP地址可以使多个Pod在同一节点上公开相同的端口 - 所有这些Pod都可以通过唯一的IP地址访问。

该IP地址在服务生命周期中保持稳定,除非明确删除。

两个不同的Pod可以使用此IP通信,但我建议使用集群DNS服务。


我们能否为集群IP分配名称而无需购买外部DNS名称?您能否建议我们如何实现这一点? - Sachin Mishra
我尝试从minikube中的一个pod对cluster-ip进行ping和traceroute,但两个命令都没有成功。 我还尝试了“minikube ssh”,然后安装了iputils-ping和traceroute软件包并运行ping和traceroute,但也没有成功。 我有什么遗漏吗? - Sandeep Khantwal

8

集群 IP 只分配给服务,它是 Kubernetes 内部 IP。


0
ClusterIP提供了一个负载均衡的IP地址。匹配标签选择器的一个或多个Pod可以将流量转发到该IP地址。ClusterIP服务必须定义一个或多个端口来侦听,并使用目标端口将TCP/UDP流量转发到容器中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接