状況は、それらの間で接続されている 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 サービスを接続できますか?