Сценарий
ClusterIP Services позволяют рабочим нагрузкам в одном кластере использовать их внутренние доменные имена кластера для доступа друг к другу.
Формат внутреннего доменного имени кластера <Service name>.<Namespace of the workload>.svc.cluster.local:<Port>, например, nginx.default.svc.cluster.local:80.
Рисунок 1 показывает взаимосвязи между каналами доступа, портами контейнеров и портами доступа.
Рисунок 1 Внутрикластерный доступ (ClusterIP)

Создание ClusterIP Service
- Войдите в консоль CCE и нажмите имя кластера, чтобы открыть консоль кластера.
- В навигационной панели выберите Сервисы & Ingresses. В правом верхнем углу нажмите Create Service.
- Настройте параметры внутрикластерного доступа.
- Имя Service: Укажите имя Service, которое может быть таким же, как имя рабочей нагрузки.
- Тип Service: Выберите ClusterIP.
- Namespace: пространство имен, к которому принадлежит рабочая нагрузка.
- Селектор: Добавьте метку и нажмите Подтвердить. Сервис будет использовать эту метку для выбора podов. Вы также можете нажать Ссылка на метку рабочей нагрузки для использования метки существующей рабочей нагрузки. В отображаемом диалоговом окне выберите рабочую нагрузку и нажмите OK.
- Версия протокола: Выберите IP-адрес разных версий в зависимости от требований сервиса. Этот параметр доступен только в кластерах версии v1.15 и выше с включённым IPv6 (устанавливается при создании кластера).
- Порты
- Протокол: протокол, используемый Service.
- Порт Service: порт, используемый Service. Номер порта может быть от 1 до 65535.
- Порт контейнера: порт прослушивателя рабочей нагрузки. Например, Nginx использует порт 80 по умолчанию.
- Нажмите OK.
Настройка типа доступа с помощью kubectl
Вы можете настроить доступ к Service с помощью kubectl. В этом разделе в качестве примера используется нагрузка Nginx, чтобы описать, как реализовать внутрикластерный доступ с помощью kubectl.
- Используйте kubectl для доступа к кластеру. Подробнее см. Accessing a Cluster Using kubectl.
- Создайте и отредактируйте nginx-deployment.yaml файл для настройки примерной нагрузки. Подробнее см. Creating a Deployment. nginx-deployment.yaml является примером имени файла. Вы можете переименовать его по необходимости.vi nginx-deployment.yaml
Содержимое файла:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:latestname: nginximagePullSecrets:- name: default-secret - Создайте и отредактируйте nginx-clusterip-svc.yaml файл для настройки параметров Service. nginx-clusterip-svc.yaml является примером имени файла. Вы можете переименовать его по необходимости.vi nginx-clusterip-svc.yaml
Содержимое файла:
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. - Создайте рабочую нагрузку.kubectl create -f nginx-deployment.yaml
Если отображается информация, аналогичная следующей, нагрузка была создана:
deployment/nginx createdПроверьте созданную нагрузку.
kubectl get podЕсли отображается информация, аналогичная следующей, нагрузка работает:
NAME READY STATUS RESTARTS AGEnginx-2601814895-znhbr 1/1 Running 0 15s - Создайте Service.kubectl create -f nginx-clusterip-svc.yaml
Если отображается информация, аналогичная следующей, Service создаётся:
service/nginx-clusterip createdПроверьте созданный Service.
kubectl get svcЕсли отображается информация, аналогичная следующей, Service был создан, и к Service был назначен внутренний IP‑адрес кластера.
# 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 - Получите доступ к Service из контейнера или узла в кластере.
- Создайте pod и получите доступ к его контейнеру.kubectl run -i --tty --image nginx:alpine test --rm /bin/sh
- Запустите curl команду для доступа к Service.
- Доступ через IP:Port:curl 10.247.74.52:8080
- Доступ через Domain-name:Port:curl nginx-clusterip.default.svc.cluster.local:8080
nginx-clusterip является именем Service, default является пространством имен, в котором находится Service, и svc.cluster.local — DNS‑домен для ClusterIP Service.
Вы можете упростить доменное имя в соответствии с вашими требованиями. Например, если 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 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> - Доступ через IP:Port:
- Создайте pod и получите доступ к его контейнеру.