web-dev-qa-db-ja.com

minikubeクラスター内からローカルデータベースに接続する

私はほとんど成功せず、minikubeポッド内からlocalhostのdockerコンテナー内にホストされているMySQLデータベースにアクセスしようとしています。私は説明されている解決策を試しました Minikubeはサービスとしてlocalhostで実行されているMySQLを公開します が効果がありません。 AWSで使用するサービスでソリューションをモデル化しましたが、minikubeで動作しないようです。私のサービスは次のように読みます

apiVersion: v1

kind: Service

metadata: 

  name: mysql-db-svc

  namespace: external

spec: 
  type: ExternalName
  ExternalName: 172.17.0.2

...ポート3306で「mysql-db-svc」を使用してポッド内からデータベースに接続しようとしましたが、役に立ちませんでした。ポッド内からアドレス「mysql-db-svc」をCURLしようとすると、ホスト名を解決できません。

誰かが欲求不満の初心者にアドバイスしてくれませんか?

6
prime

私はMinikubeでubuntuを使用しています。私のデータベースは、Dockerコンテナー内のminikubeの外部で実行され、localhost @ 172.17.0.2からアクセスできます。私の外部mysqlコンテナー用のKubernetesサービスは次のようになります。

kind: Service
apiVersion: v1
metadata:
  name: mysql-db-svc
  namespace: external
spec: 
  type: ExternalName
  externalName: 10.0.2.2

次に、プロジェクトの.env内で、DB_Hostは次のように定義されます。

mysql-db-svc.external.svc

...サービスの名前 "mysql-db-svc"とそれに続く名前空間 "external"と "svc"

それが理にかなっていると思います。

1
prime

私が間違っていない場合は、このサービスが外部であるため、エンドポイントも作成する必要があります。

あなたの場合、エンドポイントの定義は次のようになります。

kind: "Endpoints"
apiVersion: "v1"
metadata:
  name: mysql-db-svc
  namespace: external
subsets: 
- addresses:
  - ip: "10.10.1.1"
  ports:
    port: 3306

Kubernetesの外部ソースについて読むことができます サービスの定義 ドキュメント。

1
Crou

これは、サービスタイプがExternalNameであり、AWSやGKEなどのクラウド環境にのみ適合するためです。サービスをローカルで実行するには、サービスタイプをNodePortに変更します。これにより、30000〜32767の静的NodePortが割り当てられます。静的ポートを自分で割り当てる必要がある場合、minikubeがランダムなポートを選択しないようにするには、ポート定義の下のサービス定義でnodePort: 32002

また、サービス定義にMySQLデプロイメントを指すセレクターはありません。したがって、対応するセレクタキーペアを含めます(例:app: mysql-server)は、サービス定義のspecセクションにあります。そのセレクターは、MySQLデプロイメント定義で定義したセレクターと一致する必要があります。

したがって、サービス定義は次のようになります。

kind: Service
apiVersion: v1
metadata:
  name: mysql-db-svc
  namespace: external
spec:
  selector:
    app: mysql-server
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
    nodePort: 32002
  type: NodePort

サービスをデプロイした後、http:// {minikube ip}:32002を介してMySQLサービスにアクセスできます。{minikube ip}を実際のminikube ipに置き換えます。

または、次のコマンドでサービスのアクセスURLを取得できます

minikube service <SERVICE_NAME> --url

をサービスの実際の名前に置き換えます。あなたの場合それはmysql-db-svc

1
Insightcoder