繁体   English   中英

对OpenStack Octavia LBaaS v2错误进行故障排除

[英]Troubleshoot OpenStack Octavia LBaaS v2 ERROR

我有两个Ubuntu 18.04裸机服务器。 使用devstack部署,我建立了一个多节点(2个节点)集群,其中一台服务器具有控制器服务和计算能力,而第二台仅具有计算能力。 在控制器节点中,我已使用Octavia启用了lbaas v2。

# 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个小仆节点的kubernetes集群。 一些初步测试是成功的。 通过Helm部署WordPress创建了一个负载平衡器,我能够按预期访问该应用程序。

我现在正在尝试设置一个nginx-inress控制器。 当我部署Nginx-ingress控制器LoadBalancer服务时,我可以看到在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"

有趣的是,与以前的(wordpress)LoadBalancer服务相比,我注意到nginx-ingress externalRoutingPolicy设置为Local ,而wordpress指定了Cluster。 我将nginx-ingress图表的values.yaml更改为将externalRoutingPolicy设置为Cluster,现在负载均衡器正在工作。

我们希望将策略保留在“本地”以保留源IP。 有什么想法为什么不起作用?

原来我在吠错树(道歉)。 负载均衡器没有问题。

问题源于Kubernetes无法将Minion / Worker主机名与其​​节点名称匹配。 节点采用主机名的缩写形式,例如: k8s-cluster-fj7cs2gokrnz-minion-1而kube-proxy根据完全限定的名称进行k8s-cluster-fj7cs2gokrnz-minion-1.novalocalk8s-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" K8将丢弃数据包,因为它i)仅限于仅路由到该节点本地的终结点,并且ii)认为没有本地终结点。

其他曾解决此问题的人将kube-proxy配置为hostname-override以使两者匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM