Устранение неполадок ОШИБКА OpenStack Octavia LBaaS v2
У меня есть два сервера Ubuntu 18.04 с открытым исходным кодом. используя развертывание devstack, я создал многоузловой (2 узла) кластер, в котором один сервер имеет службы контроллера и выполняет вычисления, а второй - только вычисления. В узле контроллера я включил lbaas v2 с Octavia.
# LBaaS enable_plugin нейтрон-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
Я создал кластер kubernetes с 1 главным и 2 узлами миньонов. Некоторое первоначальное тестирование прошло успешно. Развертывание WordPress через Helm создало балансировщик нагрузки, и я смог получить доступ к приложению, как и ожидалось.
Я сейчас пытаюсь настроить контроллер nginx-ingress. при развертывании службы LoadBalancer контроллера nginx-ingress я вижу балансировщик нагрузки, созданный в OpenStack. однако попытки доступа к входному контроллеру с использованием внешнего IP-адреса всегда приводят к пустому ответу.
Используя CLI, я могу видеть балансировщик нагрузки, пулы и участников. Записи участника указывают на наличие ошибки:
+ --------------------- + --------------------------- ----------- + | Поле | Значение | +---------------------+--------------------------------------+ | адрес | 10.0.0.9 | | admin_state_up | Правда | | создал_ат | 2018-09-28T22:15:51 | | id | 109ad896-5953-4b2b-bbc9-d251d44c3817 | | имя | | | operating_status | ОШИБКА | | идентификатор_проекта | 12b95a935dc3481688eb840249c9b167 | | протокол_порта | 31042 | | Provisioning_status | АКТИВНЫЙ | | subnet_id | 1e5efaa0-f95f-44a1-a271-541197f372ab | | updated_at | 2018-09-28T22:16:33 | | вес | 1 | | монитор_порт | Нет | | адрес монитора | Нет | + --------------------- + --------------------------- ----------- +
Тем не менее, нет никаких признаков того, что ошибка. в журнале нет соответствующей ошибки, которую я могу найти.
Используя 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"
Интересно, что по сравнению с предыдущим (wordpress) сервисом LoadBalancer, который работал, я заметил, что для nginx-ingress externalRoutingPolicy установлено значение Local, а в wordpress указан кластер. Я изменил values.yaml для диаграммы nginx-ingress, чтобы установить для externalRoutingPolicy значение Cluster, и теперь балансировщик нагрузки работает.
Мы хотели бы сохранить политику на "Local" для сохранения исходных IP-адресов. Есть мысли о том, почему это не работает?
1 ответ
Оказывается, я лаял не на то дерево (извинения). Нет проблем с балансировщиком нагрузки.
Проблема связана с тем, что Kubernetes не может сопоставить имя хоста minion / worker с именем узла. Узлы принимают краткую форму имени хоста, например:k8s-cluster-fj7cs2gokrnz-minion-1
в то время как kube-proxy выполняет поиск на основе полностью определенного имени: k8s-cluster-fj7cs2gokrnz-minion-1.novalocal
я нашел это в журнале для Kube-прокси:
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-прокси с hostname-override
чтобы сделать два совпадают.