本文介紹如何使用kubectl port-forward
命令連接K8S集群中運行的Redis服務。這種連接方式有助于數據庫的調試工作。
注意:本文針對K8S的版本號為v1.9,其他版本可能會有少許不同。
0x00 準備工作
在進行該操作之前,需要滿足以下條件:
- 需要有一個K8S集群,并且配置好了
kubectl
命令行工具來與集群通信。如果未準備好集群,那么你可以使用Minikube創建一個K8S集群,或者你也可以使用下面K8S環境二者之一:- Katacoda
- Play with Kubernetes
- 安裝了redis-cli
如果需要查看K8S版本信息,可以輸入指令kubectl version
。
0x01 創建Pod運行Redis服務器
1、創建一個Pod:
kubectl create -f https://k8s.io/docs/tasks/access-application-cluster/redis-master.yaml
表示該Pod成功創建的輸出結果如下所示:
pod "redis-master" created
2、檢查該Pod是否運行并處于ready狀態:
kubectl get pods
當該Pod處于ready狀態時,輸出內容中的STATUS字段的值為Running:
NAME READY STATUS RESTARTS AGE
redis-master 2/2 Running 0 41s
3、確認Redis服務運行于該Pod中,并監聽端口6379:
kubectl get pods redis-master --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
輸入結果會展示端口號:
6379
0x02 轉發本地端口到Pod端口
1、轉發本地6379端口到redis-master
Pod的6379端口:
kubectl port-forward redis-master 6379:6379
輸出結果類似如下內容:
I0710 14:43:38.274550 3655 portforward.go:225] Forwarding from 127.0.0.1:6379 -> 6379
I0710 14:43:38.274797 3655 portforward.go:225] Forwarding from [::1]:6379 -> 6379
2、啟動Redis命令行界面:
redis-cli
3、在Redis命令行提示中,輸入ping
命令:
127.0.0.1:6379>ping
ping
請求成功將返回PONG
。
0x03 總結
向本地端口6379發起的連接,將會轉發到運行著Redis服務器的Pod的6379端口。通過這種機制,我們就可以使用本地工作站來調試運行在Pod內的數據庫了。
注意:由于已知的限制,端口轉發目前僅僅支持TCP協議,對于UDP協議的支持功能目前正在由issue 47862跟蹤。
英文原文:https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/