Облачная платформаAdvanced

ClusterIP

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Сценарий

ClusterIP Services позволяют рабочим нагрузкам в одном кластере использовать их внутренние доменные имена кластера для доступа друг к другу.

Формат внутреннего доменного имени кластера <Service name>.<Namespace of the workload>.svc.cluster.local:<Port>, например, nginx.default.svc.cluster.local:80.

Рисунок 1 показывает взаимосвязи между каналами доступа, портами контейнеров и портами доступа.

Рисунок 1 Внутрикластерный доступ (ClusterIP)


Создание ClusterIP Service

  1. Войдите в консоль CCE и нажмите имя кластера, чтобы открыть консоль кластера.
  2. В навигационной панели выберите Сервисы & Ingresses. В правом верхнем углу нажмите Create Service.
  3. Настройте параметры внутрикластерного доступа.

    • Имя Service: Укажите имя Service, которое может быть таким же, как имя рабочей нагрузки.
    • Тип Service: Выберите ClusterIP.
    • Namespace: пространство имен, к которому принадлежит рабочая нагрузка.
    • Селектор: Добавьте метку и нажмите Подтвердить. Сервис будет использовать эту метку для выбора podов. Вы также можете нажать Ссылка на метку рабочей нагрузки для использования метки существующей рабочей нагрузки. В отображаемом диалоговом окне выберите рабочую нагрузку и нажмите OK.
    • Версия протокола: Выберите IP-адрес разных версий в зависимости от требований сервиса. Этот параметр доступен только в кластерах версии v1.15 и выше с включённым IPv6 (устанавливается при создании кластера).
    • Порты
      • Протокол: протокол, используемый Service.
      • Порт Service: порт, используемый Service. Номер порта может быть от 1 до 65535.
      • Порт контейнера: порт прослушивателя рабочей нагрузки. Например, Nginx использует порт 80 по умолчанию.

  4. Нажмите OK.

Настройка типа доступа с помощью kubectl

Вы можете настроить доступ к Service с помощью kubectl. В этом разделе в качестве примера используется нагрузка Nginx, чтобы описать, как реализовать внутрикластерный доступ с помощью kubectl.

  1. Используйте kubectl для доступа к кластеру. Подробнее см. Accessing a Cluster Using kubectl.
  2. Создайте и отредактируйте nginx-deployment.yaml файл для настройки примерной нагрузки. Подробнее см. Creating a 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 # Port for accessing a Service
    protocol: 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: nginx
    type: ClusterIP # Type of a Service. ClusterIP indicates that a Service is only reachable from within the cluster.

  4. Создайте рабочую нагрузку.

    kubectl create -f nginx-deployment.yaml

    Если отображается информация, аналогичная следующей, нагрузка была создана:

    deployment/nginx created

    Проверьте созданную нагрузку.

    kubectl get pod

    Если отображается информация, аналогичная следующей, нагрузка работает:

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

  5. Создайте Service.

    kubectl create -f nginx-clusterip-svc.yaml

    Если отображается информация, аналогичная следующей, Service создаётся:

    service/nginx-clusterip created

    Проверьте созданный Service.

    kubectl get svc

    Если отображается информация, аналогичная следующей, Service был создан, и к Service был назначен внутренний IP‑адрес кластера.

    # kubectl get svc
    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
      • Доступ через 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 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>