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

ClusterIP

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

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

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

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

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


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

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

    Параметр

    Описание

    Тип Service

    Выберите ClusterIP.

    Имя Service

    Введите имя, которое может быть таким же, как имя workload.

    Namespace

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

    Selector

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

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

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

    Parameter

    Description

    Protocol Version

    Выберите версию протокола кластерно‑области IP‑адреса Service типа ClusterIP. Значение может быть 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 получил cluster-internal IP address.

    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>