ClusterIP
Scenario
ClusterIP Services allow workloads in the same cluster to use their cluster-internal domain names to access each other.
The cluster-internal domain name format is <Service name>.<Namespace of the workload>.svc.cluster.local:<Port>, for example, nginx.default.svc.cluster.local:80.
Figure 1 shows the mapping relationships between access channels, container ports, and access ports.
Figure 1 Intra-cluster access (ClusterIP)

Creating a ClusterIP Service
- Log in to the CCE console and click the cluster name to access the cluster console.
- In the navigation pane, choose Services & Ingresses. In the upper right corner, click Create Service.
- Configure intra-cluster access parameters.
- Service Name: Specify a Service name, which can be the same as the workload name.
- Service Type: Select ClusterIP.
- Namespace: namespace that the workload belongs to.
- Selector: Add a label and click Confirm. The Service will use this label to select pods. You can also click Reference Workload Label to use the label of an existing workload. In the dialog box that is displayed, select a workload and click OK.
- Protocol Version: Select the IP address of different versions based on service requirements. This parameter is available only in clusters of v1.15 or later with IPv6 enabled (set during cluster creation).
- Ports
- Protocol: protocol used by the Service.
- Service Port: port used by the Service. The port number ranges from 1 to 65535.
- Container Port: listener port of the workload. For example, Nginx uses port 80 by default.
- Click OK.
Setting the Access Type Using kubectl
You can configure Service access using kubectl. This section uses an Nginx workload as an example to describe how to implement intra-cluster access using kubectl.
- Use kubectl to access the cluster. For details, see Accessing a Cluster Using kubectl.
- Create and edit the nginx-deployment.yaml file to configure the sample workload. For details, see Creating a Deployment. nginx-deployment.yaml is an example file name. You can rename it as needed.vi nginx-deployment.yaml
File content:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:latestname: nginximagePullSecrets:- name: default-secret - Create and edit the nginx-clusterip-svc.yaml file to configure Service parameters. nginx-clusterip-svc.yaml is an example file name. You can rename it as needed.vi nginx-clusterip-svc.yaml
File content:
apiVersion: v1kind: Servicemetadata:labels:app: nginxname: nginx-clusteripspec:ports:- name: service0port: 8080 # Port for accessing a Serviceprotocol: TCP # Protocol used for accessing a Service. The value can be TCP or UDP.targetPort: 80 # Port used by a Service to access the target container. This port is closely related to the applications running in a container. In this example, the Nginx image uses port 80 by default.selector: # Label selector. A Service selects a pod based on the label and forwards the requests for accessing the Service to the pod. In this example, select the pod with the app:nginx label.app: nginxtype: ClusterIP # Type of a Service. ClusterIP indicates that a Service is only reachable from within the cluster. - Create a workload.kubectl create -f nginx-deployment.yaml
If information similar to the following is displayed, the workload has been created:
deployment/nginx createdCheck the created workload.
kubectl get podIf information similar to the following is displayed, the workload is running:
NAME READY STATUS RESTARTS AGEnginx-2601814895-znhbr 1/1 Running 0 15s - Create a Service.kubectl create -f nginx-clusterip-svc.yaml
If information similar to the following is displayed, the Service is being created:
service/nginx-clusterip createdCheck the created Service.
kubectl get svcIf information similar to the following is displayed, the Service has been created, and a cluster-internal IP address has been assigned to the Service.
# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.247.0.1 <none> 443/TCP 4d6hnginx-clusterip ClusterIP 10.247.74.52 <none> 8080/TCP 14m - Access the Service from a container or node in the cluster.
- Create a pod and access its container.kubectl run -i --tty --image nginx:alpine test --rm /bin/sh
- Run the curl command to access the Service.
- Access through IP:Port:curl 10.247.74.52:8080
- Access through Domain-name:Port:curl nginx-clusterip.default.svc.cluster.local:8080
nginx-clusterip is the Service name, default is the namespace where the Service is located, and svc.cluster.local is the DNS domain for the ClusterIP Service.
You can simplify the domain name based on your requirements. For example, if the Service and the accessing pod are in the same namespace, you can use nginx-clusterip:8080 to access it. If they are in different namespaces, you can use nginx-clusterip.default:8080 to access it.
If the access is successful, the following information will be displayed:
<!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 andworking. 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> - Access through IP:Port:
- Create a pod and access its container.
- Scenario
- Creating a ClusterIP Service
- Setting the Access Type Using kubectl