Устранение ошибок OpenStack Octavia LBaaS v2

У меня есть два голых сервера Ubuntu 18.04. Используя развертывание стека разработки, я создал многоузловой (2 узла) кластер, в котором один сервер имеет службы контроллера и вычисления, а второй - только вычисления. В узле контроллера я включил lbaas v2 с Octavia.

# LBaaS
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas stable/queens
enable_plugin octavia https://git.openstack.org/openstack/octavia stable/queens
enable_service q-lbaasv2 octavia o-cw o-hk o-hm o-api

Я создал кластер кубернетов с 1 главным и 2 миньон-узлами. некоторые начальные испытания прошли успешно. развертывание WordPress через Helm создало балансировщик нагрузки, и я смог получить доступ к приложению, как и ожидалось.

Сейчас я пытаюсь настроить контроллер nginx-ingress. когда я развертываю службу LoadBalancer контроллера nginx-ingress, я вижу балансировщик нагрузки, созданный в OpenStack. однако попытки доступа к контроллеру входящего трафика с использованием внешнего IP-адреса всегда приводят к пустому ответу.

Используя CLI, я могу видеть балансировщик нагрузки, пулы и участников. Записи участников указывают на наличие ошибки:

+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| address             | 10.0.0.9                             |
| admin_state_up      | True                                 |
| created_at          | 2018-09-28T22:15:51                  |
| id                  | 109ad896-5953-4b2b-bbc9-d251d44c3817 |
| name                |                                      |
| operating_status    | ERROR                                |
| project_id          | 12b95a935dc3481688eb840249c9b167     |
| protocol_port       | 31042                                |
| provisioning_status | ACTIVE                               |
| subnet_id           | 1e5efaa0-f95f-44a1-a271-541197f372ab |
| updated_at          | 2018-09-28T22:16:33                  |
| weight              | 1                                    |
| monitor_port        | None                                 |
| monitor_address     | None                                 |
+---------------------+--------------------------------------+

Однако нет никаких указаний на то, что это за ошибка. в журнале нет соответствующей ошибки, которую я могу найти.

Используя kubectl port-forward, я убедился, что входной контроллер nginx запущен / работает и правильно настроен. проблема, похоже, в балансировщике нагрузки.

У меня вопрос: как определить ошибку?

Я нашел только одно руководство по устранению неполадок, относящееся к lbaas v2, и в нем утверждается, что я смогу видеть пространства имен q-lbaas- при запуске: ip netns list. Однако нет никаких определений.

Используя helm --dry-run --debug, сервис yaml выглядит так:

# Source: nginx-ingress/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-0.25.1
    component: "controller"
    heritage: Tiller
    release: oslb2
  name: oslb2-nginx-ingress-controller
spec:
  clusterIP: ""
  externalTrafficPolicy: "Local"
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app: nginx-ingress
    component: "controller"
    release: oslb2
  type: "LoadBalancer"

Интересно, что по сравнению с предыдущей службой LoadBalancer (wordpress), которая работала, я заметил, что для nginx-ingress externalRoutingPolicy установлено значение Local, в то время как wordpress указал кластер. Я изменил values.yaml для диаграммы nginx-ingress, чтобы установить externalRoutingPolicy как Cluster, и теперь балансировщик нагрузки работает.

Мы хотели бы сохранить политику «Локально», чтобы сохранить исходные IP-адреса. Есть мысли о том, почему это не работает?


person jmer    schedule 29.09.2018    source источник
comment
В хорошем ли состоянии виртуальная машина, созданная Octavia?   -  person eandersson    schedule 30.09.2018
comment
предоставить свои услуги ямл   -  person Vit    schedule 01.10.2018
comment
@eandersson амфора ВМ кажется в порядке. я ничего не вижу в журнале или консоли. я могу пинговать. Я пытался использовать ssh для входа в систему, но ключ в /etc/octavia/.ssh, похоже, у меня не работает. Permission denied (publickey).   -  person jmer    schedule 01.10.2018
comment
@VKR добавил в описание service.yaml.   -  person jmer    schedule 01.10.2018


Ответы (1)


Оказывается, я лаял не на то дерево (извинения). Нет проблем с балансировщиком нагрузки.

Проблема связана с неспособностью Kubernetes сопоставить имя хоста миньона / рабочего с его именем узла. Узлы принимают краткую форму имени хоста, например: k8s-cluster-fj7cs2gokrnz-minion-1, в то время как kube-proxy выполняет поиск на основе полного имени: k8s-cluster-fj7cs2gokrnz-minion-1.novalocal

я нашел это в журнале для kube-proxy:

Sep 27 23:26:20 k8s-cluster-fj7cs2gokrnz-minion-1.novalocal runc[2205]: W0927 23:26:20.050146       1 server.go:586]
 Failed to retrieve node info: nodes "k8s-cluster-fj7cs2gokrnz-minion-1.novalocal" not found
Sep 27 23:26:20 k8s-cluster-fj7cs2gokrnz-minion-1.novalocal runc[2205]: W0927 23:26:20.050241       1 proxier.go:463] invalid nodeIP, initializing kube-proxy with 127.0.0.1 as nodeIP

Это приводит к тому, что Kubernetes не может найти "локальные" конечные точки для LoadBalancer (или других) служб. Если вы укажете externalTrafficPolicy: "Local", K8s будет отбрасывать пакеты, поскольку он i) ограничен маршрутизацией только до локальных для узла конечных точек и ii) считает, что локальных конечных точек нет.

другие люди, которые столкнулись с этой проблемой, настраивают kube-proxy с hostname-override, чтобы они совпадали.

person jmer    schedule 01.10.2018