更新时间:2025-07-18 GMT+08:00

集群内访问(ClusterIP)

集群内访问(ClusterIP)是Kubernetes默认的服务类型,它为集群内部提供了一种稳定的网络访问方式。Kubernetes会从服务网段中分配一个仅在集群内部可访问的虚拟IP(称为集群IP),同时CoreDNS会注册一个“集群内部域名”的DNS记录,允许通过“集群内部域名”进行解析和访问。集群内部域名格式为“<服务名称>.<工作负载所在命名空间>.svc.cluster.local:<端口号>”,例如“nginx.default.svc.cluster.local:80”

如果您只需要在集群内部进行服务间的通信,而不需要将服务暴露给集群外部,可以使用ClusterIP类型的服务。例如,集群中部署的前端应用Pod需要访问同一集群中部署的后端数据库,此时后端数据库可以配置为ClusterIP类型,以确保仅在集群内部可访问。

关于集群内访问(ClusterIP)的原理如图1所示,您可以更直观地了解该类型服务的访问通道、容器端口与访问端口映射规则。

图1 集群内访问

创建ClusterIP类型Service

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,在右上角单击“创建服务”
  3. 设置集群内访问参数。

    参数

    说明

    Service名称

    自定义服务名称,可与工作负载名称保持一致。

    访问类型

    选择“集群内访问”

    命名空间

    工作负载所在命名空间。

    选择器

    Service将会根据标签与工作负载的Pod进行关联,将流量导向包含该标签的Pod。

    您可以添加Pod标签的键值,填写后单击“确认添加”

    您也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”

    协议版本

    请根据业务选择不同版本的IP地址,具体请参见如何通过CCE搭建IPv4/IPv6双栈集群?该功能仅在1.15及以上版本的集群创建时开启了IPv6功能才会显示。

    端口配置

    • 协议:请根据业务支持的协议类型选择。
    • 容器端口:业务容器进程实际监听的端口,您需要根据运行的容器镜像确定,端口范围为1~65535。例如Nginx默认使用80端口,而MySQL的默认访问端口为3306。
    • 服务端口:通过服务的ClusterIP访问时使用的端口,您可以根据需求进行自定义,端口范围为1~65535。

  4. 单击“确定”,创建Service。创建完成后,您可以在集群中通过<ClusterIP>:<服务端口>进行访问。

您可以通过kubectl命令行设置Service访问方式。本节以nginx为例,说明kubectl命令实现集群内访问的方法。

  1. 使用kubectl连接集群,详情请参见通过kubectl连接集群
  2. 创建并编辑nginx-deployment.yaml文件,配置示例工作负载,详情请参见创建无状态负载(Deployment)。其中nginx-deployment.yaml为自定义名称,您可以随意命名。

    vi nginx-deployment.yaml
    内容如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            name: nginx
          imagePullSecrets:
          - name: default-secret

  3. 创建并编辑nginx-clusterip-svc.yaml文件,用于配置Service参数。其中nginx-clusterip-svc.yaml为自定义名称,您可以随意命名。

    vi nginx-clusterip-svc.yaml
    内容如下:
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx-clusterip
    spec:
      ports:
      - name: service0
        port: 8080                # 访问Service的端口
        protocol: TCP             # 访问Service的协议,支持TCP和UDP
        targetPort: 80            # Service访问目标容器的端口,此端口与容器中运行的应用强相关,如本例中nginx镜像默认使用80端口
      selector:                   # 标签选择器,Service通过标签选择Pod,将访问Service的流量转发给Pod,此处选择带有 app:nginx 标签的Pod
        app: nginx
      type: ClusterIP             # Service的类型,ClusterIP表示在集群内访问

  4. 创建工作负载。

    kubectl create -f nginx-deployment.yaml

    回显如下,表示工作负载已经创建。

    deployment/nginx created

    查看已创建的工作负载。

    kubectl get pod

    回显如下,工作负载状态为Running,表示工作负载已处于运行中状态。

    NAME                     READY     STATUS             RESTARTS   AGE
    nginx-2601814895-znhbr   1/1       Running            0          15s

  5. 创建服务。

    kubectl create -f nginx-clusterip-svc.yaml

    回显如下,表示服务已开始创建。

    service/nginx-clusterip created

    查看已创建的Service。

    kubectl get svc

    回显如下,表示服务已创建成功,CLUSTER-IP已生成。

    NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    kubernetes        ClusterIP   10.247.0.1     <none>        443/TCP    4d6h
    nginx-clusterip   ClusterIP   10.247.74.52   <none>        8080/TCP   14m

  6. 您可以在集群内的容器或节点上访问Service。

    1. 创建一个Pod并进入到容器内,如下所示。
      kubectl run -i --tty --image nginx:alpine test --rm /bin/sh
    2. 使用curl命令访问Service。
      • 通过IP:Port访问:
        curl 10.247.74.52:8080
      • 通过域名:Port访问(该方式不支持在节点上访问):
        curl nginx-clusterip.default.svc.cluster.local:8080

        其中nginx-clusterip为Service名称,default为Service所在的命名空间,svc.cluster.local为集群内服务的DNS域。

        您也可以根据实际情况简化域名,例如Service和发起访问的Pod在同个命名空间内可以直接使用nginx-clusterip:8080访问,跨命名空间则可以使用nginx-clusterip.default:8080访问。

      访问成功后,回显如下:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
          body {
              width: 35em;
              margin: 0 auto;
              font-family: Tahoma, Verdana, Arial, sans-serif;
          }
      </style>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      <p>If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.</p>
      
      <p>For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.</p>
      
      <p><em>Thank you for using nginx.</em></p>
      </body>
      </html>

相关文档