0

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

为了允许我的 k8s 服务(称为 master 和 slave,匹配标签 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,它允许我向地址 ( https://name_in_the_DNS ) 发出请求,而不是向我的租户的 IP 发出请求。问题是当我尝试执行以下请求时:

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

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

提前致谢!


查看服务和部署 yamls:在 Kubernetes 中可以连接两个集群 IP 服务吗?

4

1 回答 1

0

问题已经解决了。问题是我们在其他命名空间中有 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
于 2020-05-05T14:12:00.170 回答