web-dev-qa-db-ja.com

Kubernetes / minikubeを使用したローカル開発中に、ローカルホストで実行されているpostgresデータベースに接続するにはどうすればよいですか?

Google Kubernetes Engine + Google CloudSQLで実行されるアプリケーションスタックを設定しました。ローカルで開発する場合、アプリケーションを、outsideクラスターを実行しているpostgresデータベースサーバーに接続して、本番環境をシミュレートしたいと思います。

これを行う方法は、ここで説明するように外部エンドポイントを定義することであるようです: Minikubeはローカルホストで実行されているMySQLをサービスとして公開します

残念ながら、エンドポイントIPアドレスとして「127.0.0.1」を指定することはできません。

kubectl apply -f kubernetes/local/postgres-service.yaml
service "postgres-db" unchanged
The Endpoints "postgres-db" is invalid: subsets[0].addresses[0].ip: 
Invalid value: "127.0.0.1": may not be in the loopback range (127.0.0.0/8)

そのため、postgresを実際のマシンアドレスにバインドする必要があります。

ローカルホストからローカルのkubernetesクラスターにポートをマッピングする方法が必要なようですが、これまでのところ、その方法を見つけることができません。

誰かがトリックを知っていますか?あるいは、誰かがクラスター内でpostgresを実行することを含まない代替ソリューションを提案できますか?

9
lasersox

Minikubeの答えではないかもしれませんが、私はここにたどり着いたので、Docker forMacでKubernetesに対して行ったことを共有します。

PostgreSQL用に次のようなサービスを追加しました。

kind: Service
apiVersion: v1
metadata:
  name: postgres
  namespace: default
spec:
  type: ExternalName
  # https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
  externalName: Host.docker.internal
  ports:
    - name: port
      port: 5432

私のアプリケーションは、ドメイン名postgresを使用して、この設定でローカルに実行されているpostgresサーバーに接続できました。 Postgresサーバーはこの設定で127.0.0.1をリッスンできます。

6
psmith

Telepresence と呼ばれるこれに対する潜在的な解決策があります。これにより、ローカルワークロードを、実際にそのkubeクラスター内で実行されているかのようにクラスターにプロキシできます。

K8sネイティブアプローチ

Kubernetes内で直接クラウドネイティブソフトウェアを開発する場合にも、同様の問題が発生しました。 TelepresenceやSkaffoldなどのツールも調べましたが、構成が難しく、非常に時間がかかります。

そのため、同僚と一緒にDevSpace CLIを構築しました: https://github.com/covexo/devspace

お気軽にご覧になり、お試しください。デスクトップツール(ローカルターミナル、IDE、gitなど)でプログラミングしながら、すべてのワークロードをKubernetes内で直接簡単に実行できるようにすることで、あなたのような問題を解決します。

代替案:Minikubeネットワーキング

Minikubeを使用しているので、この質問への回答を確認する必要があります。 内部Kubernetes IPアドレスをホストシステムにルーティングする

代替:トンネリング

Ngrokなどのツールでローカルトンネリングを使用することもできます。 https://ngrok.com/ (ローカルで起動し、どこからでもngrokアドレスに接続するだけです)

1
LukasGentele