在 Kubernetes 中使用 traefik 作为负载均衡器的问题

Problem using traefik as load balancer in Kubernetes

情况是我有两个连接在它们之间的 k8s 服务。两者都是烧瓶服务器。它们之间的连接如下,如果有人对第一个进行 POST,这将获取文本输入并将其 POST 发送到第二个服务器,第二个服务器将更多文本添加到发布的原始文本中由用户发送,最后,这两个文本一起返回到第一个服务器,它 returns 将最终文本返回给用户。

为了允许我的 k8s 服务(称为 master 和 slave,匹配标签 app-master 和 app-slave)之间的这种连接,我有以下网络策略:

kind: NetworkPolicy
apiVersion: extensions/v1beta1
metadata:
  name: master-to-slave
  namespace: innovation
spec:
  podSelector:
    matchLabels:
      app: app-slave
  ingress:
    - ports:
      - port: 5000
        protocol: TCP
      - port: 5001
        protocol: TCP
    - from:
      - namespaceSelector:
          matchLabels:
            app: app-master

要从租户外部进行卷曲,我必须使用 traefik,因为我在一个已经将 traefik 作为 NodePort 的租户中工作,所以我不能将我的主服务公开为 nodePort 或将其转换为类型 LoadBalancer。这个应用程序的入口是下一个

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ingress-innovation
  namespace: innovation
  annotations:
    traefik.frontend.rule.type: PathPrefixStrip
spec:  
  rules:
  - http:
      paths:
      - path: /master
        backend:
          serviceName: master
          servicePort: 5000
      - path: /slave
        backend:
          serviceName: slave
          servicePort: 5001

我还有一个 DNS,它允许我向地址 (https://name_in_the_DNS) 发出请求,而不是向我的租户的 IP 发出请求。问题是当我尝试执行以下请求时:

curl https://name_in_the_DNS/master -X POST -d texto

给我一个错误(网关超时)。而如果我使用 "kubectl port-forward" 应用程序按预期工作。知道如何解决这个问题吗?我想这与 networkPolicy 有关,因为我在租户中有其他应用程序并且 curl 请求适用于它们。

提前致谢!


查看服务和部署 yaml:

问题已经解决。问题是我们在其他名称空间中有 traefik,因此缺少另一个允许任何名称空间之间通信的网络策略。修复问题的 yaml 如下。

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: all-to-all
  namespace: innovation
spec:
  podSelector: {} #all pods in the namespace (innovation)
  ingress:
    - from:
      - namespaceSelector: {} #from all namespaces, including the one in which traefik ingress is located
  policyTypes:
  - Ingress