⚒️

[k8s] セキュアかつ簡単にprivate subnetにあるDBやredisへGUIツールでアクセスする方法

2023/06/05に公開

aurora mysqlやrdsなど、private subnetにあるものにはローカルPCから直接接続できません。kubernetesクラスタ上でmysql clientポッドなどを立ち上げて、pod内からcliを叩けば接続できますが、GUIに比べて使いづらくヒストリや接続設定も残らないので非常に不便です。

解決策

Connect to a Resource Behind a k8s Cluster From Local Machine - yt coffeeの通りにやります。

1. 接続先のプライベートIPアドレスを取得する

kubectl run -i --tty busybox --image=busybox -- sh などからnslookupやdigを使ってプライベートIPアドレスを取得する

2. socatで接続を中継する

kubectl run ${SERVICE_NAME} --generator=run-pod/v1 --image=alpine/socat \
  -it --tty --rm --expose=true --port=${PORT} \
  tcp-listen:${PORT},fork,reuseaddr \
  tcp-connect:${ENDPOINT}:${PORT}

3. port-forwardによりsocatとローカルPCのポートを接続する

kubectl port-forward service/${SERVICE_NAME} ${PORT}:${PORT}

この方法のよいところは、手元で使い終わったら自動的にpodがdeleteされることです。もし削除を忘れていても、 --rm オプションにより切断されたタイミングで削除されるため安心です。

スポンサー

この記事はSpeeeでの業務中に15分で書きました。

Discussion