マシンでminikubeバージョンv0.17.1を実行しています。 MySQLインスタンスがKubernetesクラスターの外部にあるAWSにある環境をシミュレートしたいと思います。
基本的に、自分のマシンで実行しているローカルMySQLインスタンスをminikube経由で実行しているKubernetesクラスターに公開するにはどうすればよいですか?
Kubernetesを使用すると、セレクタなしでサービスを作成できます。また、クラスタはこのサービスに関連するエンドポイントを作成しません。この機能は通常、レガシーコンポーネントまたは外部コンポーネントのプロキシに使用されます。
セレクタなしでサービスを作成する
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 1443
targetPort: <YOUR_MYSQL_PORT>
相対エンドポイントオブジェクトを作成する
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <YOUR_MYSQL_ADDR>
ports:
- port: <YOUR_MYSQL_PORT>
サービスIPを取得する
$ kubectl get svc my-service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service <SERVICE_IP> <none> 1443/TCP 18m
サービスからMYSQLにアクセスする<SERVICE_IP>:1443
またはmy-service:1443
Windowsの場合は、ファイアウォールを開いてください。
オプション1-セレクタなしのヘッドレスサービスを使用します
このサービスにはセレクタがないため、対応するEndpoints
オブジェクトは作成されません。サービスを独自の特定のエンドポイントに手動でマップできます( doc を参照)。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
ports:
- port: 80
targetPort: 8080
---
kind: Endpoints
apiVersion: v1
metadata:
name: my-service
subsets:
- addresses:
- ip: 10.0.2.2
ports:
- port: 8080
オプション2- ExternalName
serviceを使用します
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: ExternalName
externalName: minikube.Host
唯一の注意点は、minikube.Host
を解決できる必要があることです。この行をetc/hosts
ファイルに追加するだけで実行できます。
10.0.2.2 minikube.Host
ExternalName
は現在、ポートマッピングをサポートしていません。
別のメモ:IP 10.0.2.2
はVirtual Boxでのみ動作することがわかっています( [〜#〜] so [〜#〜] を参照)。 xhyve
の場合は、192.168.99.1
に置き換えてみてください(GitHub issue および issue を参照)。デモ GitHub 。
ローカルポートをMinikubeクラスターにマップする場合は、 Kubernetesのドキュメント に記載されているようにkubectl port-forward
を使用できます。
ここでは、同じポートでminikube ipのRedisサービスに127.0.0.1:6379
をマッピングする例を示します。
kubectl port-forward svc/redis-master 6379:6379