Облачная платформаВсе платформы

ClusterIP

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

ClusterIP - это тип Service по умолчанию в Kubernetes и обеспечивает стабильный внутрикластерный доступ. Kubernetes назначает виртуальный IP‑адрес (IP‑адрес, ограниченный кластером), который может быть доступен только внутри кластера из CIDR‑блока Service кластера. CoreDNS сопоставляет внутрикластерное доменное имя назначенному IP‑адресу кластера. Формат доменного имени: <Service-name>.<namespace-of-the-workload>.svc.cluster.local:<port>, например, nginx.default.svc.cluster.local:80.

Если pod'ам необходимо взаимодействовать друг с другом внутри кластера, вы можете создать Service типа ClusterIP. Например, если фронтенд‑pod в кластере должен получить доступ к бэкенд‑базе данных в том же кластере, вы можете создать Service типа ClusterIP.

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

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


Использование консоли CCE

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

    Параметр

    Описание

    Имя Service

    Введите имя, которое может совпадать с именем рабочей нагрузки.

    Тип Service

    Выберите ClusterIP.

    Namespace

    Выберите пространство имён, к которому относится рабочая нагрузка.

    Селектор

    Service будет связан с pod'ами рабочей нагрузки на основе метки и будет перенаправлять трафик к pod'ам с этой меткой.

    Вы можете добавить ключ и значение для метки pod и щелкнуть Подтвердить.

    Вы также можете щелкнуть Ссылка на метку рабочей нагрузки для использования метки существующей рабочей нагрузки. В появившемся диалоговом окне выберите рабочую нагрузку и щелкните OK.

    Версия протокола

    Выберите IP‑адрес разных версий в зависимости от требований сервиса. Эта опция доступна только в кластерах v1.15 и выше с включённым IPv6 (устанавливается при создании кластера).

    Порт

    • Протокол: протокол, поддерживаемый Service.
    • Порт контейнера : порт, на котором слушают контейнеры сервиса. Диапазон порта от 1 до 65535. Необходимо определить порт в соответствии с образом контейнера. Например, порт по умолчанию для Nginx — 80, а для MySQL — 3306.
    • Порт Service : порт, используемый для доступа к Service типа ClusterIP. При необходимости можно задать кастомный порт. Диапазон порта от 1 до 65535.

  4. Щелкните OK. Затем получайте доступ к Service через <ClusterIP>:<Service-port>.

Использование 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 TCPTCP or UDPUDP.
    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:nginxapp:nginx label.
    app: nginx
    type: ClusterIP # Type of a Service. ClusterIPClusterIP указывает, что Service доступен только изнутри кластера.

  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 15snginx-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 создан, и ему назначен внутрикластерный 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
      • Доступ с помощью Domain name:Port (не поддерживается на узлах):
        curl nginx-clusterip.default.svc.cluster.local:8080

        nginx-clusterip — имя Service, default — пространство имён, в котором находится Service, и svc.cluster.local — DNS‑домен для Service типа ClusterIP.

        Вы можете упростить доменное имя в соответствии с вашими требованиями. Например, если Service и pod‑клиент находятся в одном пространстве имён, можно использовать nginx-clusterip:8080 для доступа к нему. Если они находятся в разных пространствах имён, можно использовать nginx-clusterip.default:8080 для доступа к нему.

      Если доступ прошёл успешно, будет отображена следующая информация:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Добро пожаловать в nginx!</title>
      <style>
      body {
      width: 35em;
      margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif;
      }
      </style>
      </head>
      <body>
      <h1>Добро пожаловать в nginx!</h1>
      <p>Если вы видите эту страницу, веб‑сервер nginx успешно установлен и работает. Требуется дальнейшая настройка.</p>
      <p>Для онлайн‑документации и поддержки, пожалуйста, обратитесь к
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Коммерческая поддержка доступна по адресу
      <a href="http://nginx.com/">nginx.com</a>.</p>
      <p><em>Спасибо за использование nginx.</em></p>
      </body>
      </html>