私はほとんど成功せず、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しようとすると、ホスト名を解決できません。
誰かが欲求不満の初心者にアドバイスしてくれませんか?
私は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"
それが理にかなっていると思います。
私が間違っていない場合は、このサービスが外部であるため、エンドポイントも作成する必要があります。
あなたの場合、エンドポイントの定義は次のようになります。
kind: "Endpoints"
apiVersion: "v1"
metadata:
name: mysql-db-svc
namespace: external
subsets:
- addresses:
- ip: "10.10.1.1"
ports:
port: 3306
Kubernetesの外部ソースについて読むことができます サービスの定義 ドキュメント。
これは、サービスタイプが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