Kubernetes 上の Jupyter ノートブックが外部の Docker サービスに接続できない

Kubernetes 上の Jupyter ノートブックが外部の Docker サービスに接続できない

私は、kubernetes サーバーの外部で、jupyter ノートブックと docker サービスを使用して kubernetes (kubeflow + k8s) ポッドを実行しています。現在、sql サービスに接続しようとしていますが、ConnectionResetError が発生し続けます。ファイアウォールと docker の両方が必要なポートを公開していますが、k8s が接続できない状態が続いています。何が問題なのでしょうか? (詳細が必要な場合はお知らせください)。

ありがとう。

答え1

コメントで述べたように

istioの観点からこれを機能させるには、以下を追加する必要がありますサービスエントリそのため、istio が挿入されたポッドは外部データベースと通信できるようになります。

ServiceEntry を使用すると、Istio の内部サービス レジストリにエントリを追加できるため、メッシュ内の自動検出されたサービスがこれらの手動で指定されたサービスにアクセスしたり、ルーティングしたりできます。サービス エントリは、サービスのプロパティ (DNS 名、VIP、ポート、プロトコル、エンドポイント) を記述します。これらのサービスは、メッシュ外部のサービス (Web API など) や、プラットフォームのサービス レジストリの一部ではないメッシュ内部のサービス (Kubernetes 内のサービスと通信する VM のセットなど) である可能性があります。さらに、workloadSelector フィールドを使用して、サービス エントリのエンドポイントを動的に選択することもできます。これらのエンドポイントは、WorkloadEntry オブジェクトを使用して宣言された VM ワークロードまたは Kubernetes ポッドにすることができます。1 つのサービスでポッドと VM の両方を選択できるため、サービスに関連付けられている既存の DNS 名を変更することなく、VM から Kubernetes にサービスを移行できます。

istioに例がありますドキュメンテーション

注意してくださいIstio をインストールした後、MySQL に接続できないこれは、MySQLでは機能しないPERMISSIVEモードによるものです。次のようなエラーメッセージが表示される場合があります。ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0.

この問題を解決するには 2 つの選択肢があります。

1.相互TLSを無効にします。

Istio 相互 TLS が必要ない場合は、このオプションを選択します。これは、MySQL サービスで相互 TLS を明示的に無効にすることで実現します。

$ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: mysql-nomtls-peerauthn
spec:
  selector:
    matchLabels:
      app: <YOUR-MYSQL-SERVICE>     # The label of *your* K8s Service
  mtls:
    mode: DISABLE
EOF

2.STRICTモードで相互TLSを有効にします。

MySQL の相互 TLS 保護が必要な場合は、宛先ルールと認証ポリシーを使用して相互 TLS を有効にします。

$ kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: mysql-mtls-peerauthn
spec:
  selector:
    matchLabels:
      app: <YOUR-MYSQL-SERVICE>     # The label of *your* K8s Service
  mtls:
    mode: STRICT
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: mysql-mtls-dr
spec:
  host: YOUR-MYSQL-SERVICE     # The name of *your* K8s Service
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
EOF

関連情報