繁体   English   中英

Kubernetes:通过 traefik 入口控制器处理与集群中多个 LoadBalancer 的连接

[英]Kubernetes: Handle connections with multiple LoadBalancer in cluster via traefik ingress controller

如果我不能正确解释,可能很难解释很抱歉。

在我们的 k8s 集群中,我们有两个 OpenStack-Load Balancer,因为我们希望通过必须面向 Internet 的入口公开我们的应用程序。 在同一个集群中,我们还部署了 pgadmin4,它必须面向内网。(只能从内网访问。)

所以在这些 OpenStack-LB 之前,我们还有 f5 负载均衡器,它处理 https 连接、ssl .. 以及通过内网或互联网公开的逻辑。

MyApp 面向互联网,需要通过 host.internet.net 访问

PgAdmin4 是内网,需要通过 host.intranet.net/pgadmin4 访问

所以问题是,当我尝试使用 host.internet.net 通过 ingress 公开我的应用程序时,它不起作用,并且我收到以下错误,原因可能是它无法与正确的 openStack-LB 通信。 当我尝试通过 openStack-lb IP 公开时,一切正常。

{"level":"error","msg":"找不到 dev/oneapihub-ui-dev 的服务","time":"2020-03-26T05:20:05Z"} {"level":"error ","msg":"找不到 dev/oneapihub-ui-dev 的端点","time":"2020-03-26T05:20:05Z"}

问题是,我如何通过入口控制器处理这个问题? 我应该安装另一个 traefik 入口控制器吗?

capel0068340585:~ semural$ kubectl get ingress -n ingress
NAME                        HOSTS   ADDRESS   PORTS   AGE
ingress-traefik-dashboard   *                 80      21d

kubectl get tenantSpec -o yaml

    loadBalancers:
    - ip: <IP1>
      name: LBaaS2
      ports:
      - extPort: 80
        name: "80"
        nodePort: 30001
    - ip: <IP2>
      name: LBaaS1
      ports:
      - extPort: 80
        name: "80"
        nodePort: 30000

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/oneapihub-ui-dev        ClusterIP   10.254.173.130   <none>        80/TCP     15m

NAME                        ENDPOINTS           AGE
endpoints/oneapihub-ui-dev        10.6.24.136:3000    15m

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: traefik
  hosts:
    - host:  host.internet.net -> example
      paths: [/]
  tls: []

ingress:
  enabled: ingress
  annotations: 
    kubernetes.io/ingress.class: traefik
  hosts:
    - host: host.intranet.net
      paths:
      - /pgadmin4

您的错误状态为"Service not found for dev/oneapihub-ui-dev" ,这意味着 traefik 正在尝试连接到它无法找到的名为“oneapihub-ui-dev”的开发命名空间中的服务。

您需要确保服务存在并且它有端点。 您可以使用kubectl -n dev get service oneapihub-ui-dev检查该服务是否存在。 如果存在,请使用kubectl -n dev get ep oneapihub-ui-dev检查它是否具有端点。

编辑:如果服务存在并具有端点,那么您可能需要查看 traefik 的 RBAC 权限,以查看它是否有足够的权限来查看 dev 命名空间,以及您是否没有在 dev 命名空间上部署任何 NetworkPolicies 以防止来自连接的入口命名空间。

我通过使用 labelSelector for traefik 解决了这个问题.. 我只为内部网络公开的服务有一个标签,例如 traffic-type=internal.. 您还可以为 RBAC 权限提供命名空间。

kubernetes:
  namespaces:
   - default
   - database
   - monitoring
   - logging
   - ingress
  labelSelector: "traffic-type=internal"

暂无
暂无

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

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