0

状況は、それらの間で接続されている 2 つの k8s サービスがあるということです。どちらもフラスコサーバーです。それらの間の接続は次のとおりです。誰かが最初のサーバーに POST を行うと、これはテキスト入力を取得し、それを 2 番目のサーバーに POST して、ユーザーが投稿した元のテキストにテキストを追加し、最後に、 2 つのテキストが一緒に最初のサーバーに返され、最終的なテキストがユーザーに返されます。

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

テナントの外部から curl を作成するには、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

また、テナントの IP に対して要求を行う代わりに、アドレス ( https://name_in_the_DNS ) に対して要求を行うことができる DNS もあります。問題は、次のリクエストを実行しようとしたときです。

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

エラーが表示されます (ゲートウェイ タイムアウト)。「kubectl port-forward」を使用すると、アプリは期待どおりに動作します。この問題を解決する方法はありますか? テナント内に他のアプリケーションがあり、それらに対してcurlリクエストが機能するため、networkPolicyと関係があると思います。

前もって感謝します!


サービスとデプロイメントの yaml を確認する場合: Kubernetes で 2 つのクラスター IP サービスを接続できますか?

4

1 に答える 1