kubectl port-forward
は指定したpodのポートをローカルマシンに開いてくれる便利な機能なのですが、例えばpostgres:5432とmemcache:11211を一緒に開けたい場合には二つのpodに別々にport-forwardしなければならず、さらにこれを増やそうとすると面倒な事になります。
そこで、望みのサービスのポートを転送してくれるゲートウェイとなるPodを作ってそれを踏み台にしてport-forwardすることで任意の数の転送を一回のport-forwardで済ませてしまいましょう。
apiVersion: v1
kind: Pod
metadata:
name: gw
spec:
terminationGracePeriodSeconds: 0
containers:
- name: alpine
image: alpine:latest
command: ["sh", "-c", "while true; do sleep 3600; done"]
restartPolicy: Never
例えばこんな感じにゲートウェイとなるPodを作成して kubectl exec -it gw -- sh
で socat
をインストールします。
apk add socat
続いて socatを使って望みのserviceにポートを転送します
socat TCP-LISTEN:5432,fork TCP:postgres:5432 &
socat TCP-LISTEN:11211,fork TCP:memcached:11211 &
exit
あとはローカル環境から
kubectl port-forward gw 5432:5432 11211:11211
とやれば一度にポートフォワードできます。
転送するサービスを増やしたい時には kubectl exec -it gw -- sh
で socat ...
を足してやればokです。
まあ最初から kubectl port-forward が sshのように
kubectl port-forward gw 5432:postgres:5432 11211:memcached:11211
みたいに書けたら良かったんですけどね