nav-img
Advanced

Как указать порт доступа для ELB при использовании команд kubectl?

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

Необходимые условия:

  • Создан расширенный балансировщик нагрузки ELB.

  • Сервер ECS прикреплен к кластеру посредством команды kubectl.

Порядок действий:

  1. Авторизуйтесь в сервере ECS, на котором настроен kubectl.

  2. Создайте и отредактируйте файлы nginx-deployment.yaml и nginx-elb-svc.yaml.

    Примечание

    Имена используемых файлов приведены в качестве примера.

    vi nginx-deployment.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: nginx
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: nginx
    strategy:
    type: RollingUpdate
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - image: nginx
    imagePullPolicy: Always
    name: nginx
    imagePullSecrets:
    - name: default-secret

    vi nginx-elb-svc.yaml

    Примечание

    Прежде чем разрешить Sticky session, удостоверьтесь, что для рабочей нагрузки указан протокол TCP и настроено правило Anti-affinity (т.е. все поды рабочей нагрузки должны быть развернуты на разных узлах).

    • Автоматическое создание балансировщика нагрузки:

      apiVersion: v1
      kind: Service
      metadata:
      annotations:
      kubernetes.io/elb.class: union
      kubernetes.io/session-affinity-mode: SOURCE_IP
      kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
      kubernetes.io/elb.autocreate:
      "{\"type\":\"public\",\"bandwidth_name\":
      \"cce-bandwidth- 1551163379627\",
      \"bandwidth_chargemode\":\"bandwidth\",\"bandwidth_size\":5,
      \"bandwidth_sharetype\":\"PER\",
      \"eip_type\":\"5_bgp\",\"name\":\"james\"}"
      labels:
      app: nginx
      name: nginx
      spec:
      externalTrafficPolicy: Local
      ports:
      - name: service0
      port: 80
      protocol: TCP
      targetPort: 80
      selector:
      app: nginx
      type: LoadBalancer
    • Использование существующего балансировщика нагрузки:

      apiVersion: v1
      kind: Service
      metadata:
      annotations:
      kubernetes.io/elb.class: union
      kubernetes.io/session-affinity-mode: SOURCE_IP
      kubernetes.io/elb.id: 3c7caa5a-a641-4bff-801a-feace27424b6
      kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
      labels:
      app: nginx
      name: nginx
      spec:
      loadBalancerIP: 10.78.42.242
      externalTrafficPolicy: Local
      ports:
      - name: service0
      port: 80
      protocol: TCP
      targetPort: 80
      selector:
      app: nginx
      type: LoadBalancer
    Таблица 3. Основные параметры

    Параметр

    Тип

    Описание

    kubernetes.io/elb.class

    String

    Обязательный параметр. Должно быть указано значение union, если используется расширенный балансировщик.

    kubernetes.io/sessionaffinity-mode

    String

    Опционально. Нужно добавить данный параметр, если включен «Sticky Session». Значение SOURCE_IP указывает, что listeners обеспечивают «Sticky Session» исходными IP-адресами.

    kubernetes.io/elb.id

    String

    Опционально. Данный параметр обязателен, если используется существующий балансировщик нагрузки.

    kubernetes.io/elb.subnet-id

    String

    Опционально. Данный параметр обязателен, если используется автоматически созданный балансировщик нагрузки.

    kubernetes.io/elb.autocreate

    elb.autocreate object

    Опционально. Данный параметр обязателен, если используется автоматически созданный балансировщик нагрузки для общей сети. Система создаст расширенный балансировщик нагрузки и EIP. Также параметр является обязательным, если используется автоматически созданный балансировщик нагрузки для частной сети. Система создаст расширенный балансировщик нагрузки.

    loadBalancerIP

    String

    Частный IP-адрес балансировщика нагрузки частной сети или общий IP-адрес балансировщика нагрузки общей сети.

    externalTrafficPolicy

    String

    Опционально. Нужно добавить данный параметр, если включен «Sticky Session», и тогда запросы будут направлены на определенный узел.

    port

    Integer

    Порт доступа, который указан в балансировщике нагрузок и сопоставлен с частным IP-адресом кластера.

    targetPort

    Integer

    Порт контейнера в консоли CCE.

    Параметры elb.autocreate

    Параметр

    Тип

    Описание

    name

    String

    Название автоматически созданного балансировщика. Значение должно содержать от 1 до 64 символов: буквы, цифры, точки, нижние подчеркивания (_) и дефисы (-).

    type

    String

    Тип сети балансировщика нагрузки: общая сеть или частная сеть.

    bandwidth_name

    String

    Название пропускной способности. Название по умолчанию cce-bandwidth-******. Значение должно содержать от 1 до 64 символов: буквы, цифры, точки, нижние подчеркивания (_) и дефисы (-).

    bandwidth_size

    Integer

    Размер пропускной способности.

    bandwidth_sharetype

    String

    Sharing mode пропускной способности: PER — Dedicated Bandwidth, WHOLE — Shared Bandwidth.

    eip_type

    String

    Вид EIP, поддерживаемый ELB.

  3. Создайте рабочую нагрузку:

    kubectl create -f nginx-deployment.yaml

    Отобразится успешное создание рабочей нагрузки, как в примере ниже:

    deployment "nginx" created

    kubectl get po

    Отобразится запуск рабочей нагрузки, как в примере ниже:

    NAME READY STATUS RESTARTS AGE
    etcd-0 0/1 ImagePullBackOff 0 1h
    icagent-m9dkt 0/0 Running 0 3d
    nginx-2601814895-c1xhw 1/1 Running 0 6s
  4. Создайте сервис:

    kubectl create -f nginx-elb-svc.yaml

    Отобразится успешное сервиса, как в примере ниже:

    service "nginx" created

    kubectl get svc

    Отобразится успешная установка Access Type и доступность рабочей нагрузки, как в примере ниже:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    etcd-svc ClusterIP None <none> 3120/TCP 1h
    kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d
    nginx LoadBalancer 10.247.130.196 10.78.42.242 80:31540/TCP 51s
  5. Введите URL в адресную строку браузера, например, 10.78.42.242:31540, где 10.78.42.242 — IP-адрес балансировщика нагрузки, а 31540 — порт доступа.