- tocdepth
2
Как указать порт доступа для ELB при использовании команд kubectl?
В качестве примера будет использована рабочая нагрузка Nginx.
Необходимые условия:
Создан расширенный балансировщик нагрузки ELB.
Сервер ECS прикреплен к кластеру посредством команды
kubectl
.
Порядок действий:
Авторизуйтесь в сервере ECS, на котором настроен
kubectl
.Создайте и отредактируйте файлы
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
Параметр
Тип
Описание
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
Опционально. Данный параметр обязателен, если используется автоматически созданный балансировщик нагрузки для общей сети. Система создаст расширенный балансировщик нагрузки и EIP. Также параметр является обязательным, если используется автоматически созданный балансировщик нагрузки для частной сети. Система создаст расширенный балансировщик нагрузки.
loadBalancerIP
String
Частный IP-адрес балансировщика нагрузки частной сети или общий IP-адрес балансировщика нагрузки общей сети.
externalTrafficPolicy
String
Опционально. Нужно добавить данный параметр, если включен «Sticky Session», и тогда запросы будут направлены на определенный узел.
port
Integer
Порт доступа, который указан в балансировщике нагрузок и сопоставлен с частным IP-адресом кластера.
targetPort
Integer
Порт контейнера в консоли CCE.
Параметр
Тип
Описание
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.
Создайте рабочую нагрузку:
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
Создайте сервис:
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
Введите URL в адресную строку браузера, например,
10.78.42.242:31540
, где10.78.42.242
— IP-адрес балансировщика нагрузки, а31540
— порт доступа.
для Dev & Test