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

这种情况是我有两个相互连接的k8s服务。两者都是烧瓶服务器。它们之间的连接如下,如果有人在第一个服务器上发布了POST,它将获得文本输入,然后将其发布到第二个服务器上,这将在用户发布的原始文本中添加更多文本,最后,两个文本一起返回到第一台服务器,然后它将最终文本返回给用户。

要允许我的k8s服务之间相互连接(称为主服务器和从服务器,它们匹配标签app-master和app-slave),我具有以下networkPolicy:

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,该DNS允许我向地址(https://name_in_the_DNS)发出请求,而不是向租户的IP发送请求。问题是当我尝试执行以下请求时:

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

给我一​​个错误(网关超时)。如果我使用“ kubectl port-forward”,该应用程序将按预期运行。关于如何解决此问题的任何想法?我想这与networkPolicy有关,因为我在租户中还有其他应用程序,并且curl请求对它们有效。

谢谢!


有关查看服务和部署Yaml的信息:Could two cluster IP services be connected in Kubernetes?

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

问题已经解决。问题是,我们在其他名称空间中有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
本文链接:https://www.f2er.com/2419009.html

大家都在问