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

ClusterIP

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

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

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

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

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


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

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

    Parameter

    Description

    Service Type

    Выберите ClusterIP.

    Service Name

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

    Namespace

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

    Selector

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

    Вы также можете нажать Reference Workload Label, чтобы использовать метку существующей рабочей нагрузки. В отображённом диалоговом окне выберите рабочую нагрузку и нажмите OK.

  4. Настройте параметры доступа.

    Parameter

    Description

    Protocol Version

    Выберите версию протокола IP‑адреса, ограниченного кластером, для ClusterIP Service. Значение может быть IPv4, IPv6, IPv4/IPv6 (по умолчанию используется IPv4) или IPv6/IPv4 (по умолчанию используется IPv6) в зависимости от сценария применения. Значение по умолчанию — IPv4.

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

    Port

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

  5. Click Create. Then, access the Service through <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 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
      • Доступ с помощью 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>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>