Как указать порт доступа для 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 — порт доступа.