【问题标题】:Kubernetes: Handle connections with multiple LoadBalancer in cluster via traefik ingress controllerKubernetes:通过 traefik 入口控制器处理集群中多个 LoadBalancer 的连接
【发布时间】:2020-07-06 20:00:52
【问题描述】:

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

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

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

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

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

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

{"level":"error","msg":"找不到服务 开发/oneapihub-ui-dev","时间":"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

【问题讨论】:

    标签: kubernetes kubernetes-ingress traefik traefik-ingress


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-04
        • 2021-09-27
        • 1970-01-01
        • 2020-01-11
        相关资源
        最近更新 更多