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

ClusterIP

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

ClusterIP — тип Service по умолчанию в Kubernetes, обеспечивающий стабильный доступ внутри кластера. Kubernetes назначает виртуальный IP‑адрес (IP‑адрес, ограниченный кластером), который может быть доступен только внутри кластера из блока Service CIDR кластера. CoreDNS сопоставляет cluster-internal domain name с назначенным 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 и нажмите cluster name, чтобы открыть консоль кластера.
  2. В navigation pane выберите Services \u0026 Ingresses. В правом верхнем углу нажмите Create Service.
  3. Настройте параметры доступа внутри кластера.

    Параметр

    Описание

    Service Name

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

    Service Type

    Выберите ClusterIP.

    Namespace

    Выберите namespace, к которому относится workload.

    Selector

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

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

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

    Protocol Version

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

    Port

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

  4. Click OK. Then, access the Service through <ClusterIP>:<Service-port>.

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

Вы можете настроить доступ к Service с помощью kubectl. В этом разделе в качестве примера используется workload 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‑домен для 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>