Распределение трафика#
Ниже приведен пример использования ресурса VirtualServer
для настройки распределения трафика в приложении Cafe
.
Относительно базовой конфигурации были внесены следующие изменения:
Вместо одной версии сервиса
coffee
теперь есть две:coffee-v1-svc
иcoffee-v2-svc
.90% трафика направляется на
coffee-v1-svc
, а оставшиеся 10% — наcoffee-v2-svc
.Для упрощения примера убраны TLS-терминация и сервис
tea
.
Предварительные действия#
Установите ANIC с включенными пользовательскими ресурсами.
Сохраните публичный IP-адрес ANIC в переменной оболочки:
$ IC_IP=XXX.YYY.ZZZ.III
Сохраните HTTP-порт ANIC в переменной оболочки:
$ IC_HTTP_PORT=<номер порта>
Настройка распределения трафика#
Создайте Deployment и Service для
coffee
:apiVersion: apps/v1 kind: Deployment metadata: name: coffee-v1 spec: replicas: 2 selector: matchLabels: app: coffee-v1 template: metadata: labels: app: coffee-v1 spec: containers: - name: coffee-v1 image: angiesoftware/angie-hello:plain-text ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: coffee-v1-svc spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: coffee-v1 --- apiVersion: apps/v1 kind: Deployment metadata: name: coffee-v2 spec: replicas: 2 selector: matchLabels: app: coffee-v2 template: metadata: labels: app: coffee-v2 spec: containers: - name: coffee-v2 image: angiesoftware/angie-hello:plain-text ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: coffee-v2-svc spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: coffee-v2
Примените настройки:
$ kubectl create -f cafe.yaml
Настройте балансировку нагрузки.
Создайте ресурс
VirtualServer
:apiVersion: k8s.angie.software/v1 kind: VirtualServer metadata: name: cafe spec: host: cafe.example.com upstreams: - name: coffee-v1 service: coffee-v1-svc port: 80 - name: coffee-v2 service: coffee-v2-svc port: 80 routes: - path: /coffee splits: - weight: 90 action: pass: coffee-v1 - weight: 10 action: pass: coffee-v2
Примените настройки:
$ kubectl create -f cafe-virtual-server.yaml
Проверьте, что конфигурация успешно применена, просмотрев события
VirtualServer
:$ kubectl describe virtualserver cafe
Пример вывода:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal AddedOrUpdated 5s anic Configuration for default/cafe was added or updated
Проверьте работу приложения с помощью
curl
. Используйте--resolve
, чтобы указать IP-адрес и HTTP-порт ANIC для доменаcafe.example.com
. Выполните несколько запросов, чтобы убедиться, что ANIC направляет трафик на разные версии сервисаcoffee
:$ curl --resolve cafe.example.com:$IC_HTTP_PORT:$IC_IP http://cafe.example.com:$IC_HTTP_PORT/coffee
Результат:
90% запросов будут направлены на
coffee-v1-svc
:Server address: 10.16.0.151:80 Server name: coffee-v1-78754bdcfb-7xp27 ...
10% запросов будут направлены на
coffee-v2-svc
:Server address: 10.16.0.152:80 Server name: coffee-v2-7fd446968b-lwhgcd ...