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

ClusterIP

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

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

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

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

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


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

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

    Параметр

    Описание

    Имя Сервиса

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

    Тип Сервиса

    Выберите ClusterIP.

    Namespace

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

    Селектор

    Сервис будет связан с pod‑ами workload на основе метки и будет направлять трафик к pod‑ам с этой меткой.

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

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

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

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

    Порт

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

  4. Нажмите ОК. Затем доступ к Service через <ClusterIP>:<Service-port>.

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

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

  1. Используйте kubectl для доступа к кластеру. Для получения подробностей см Доступ к кластеру с помощью kubectl.
  2. Создайте и отредактируйте nginx-deployment.yaml файл для настройки примера рабочей нагрузки. Для получения подробностей см Создание развертывания. 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-адрес кластера.

    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
      • Доступ используя Имя домена:Порт (не поддерживается на узлах):
        curl nginx-clusterip.default.svc.cluster.local:8080

        nginx-clusterip это имя службы, default это пространство имен, в котором находится Service, и svc.cluster.local это DNS-домен для службы ClusterIP.

        Вы можете упростить имя домена в соответствии с вашими требованиями. Например, если 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>