k8s使用port-forward访问集群中的应用程序(只能在执行命令的机器上开放端口)
k8s使用port-forward訪問(wèn)集群中的應(yīng)用程序
本文描述了如何使用 kubectl port-forward 訪問(wèn) Kubernetes 集群中的 Redis Server。這種連接方式在實(shí)際進(jìn)行Debug時(shí)非常有效。
- 為Redis創(chuàng)建Deployment和Service
- 轉(zhuǎn)發(fā)本地端口到Pod的端口
- 總結(jié)
為Redis創(chuàng)建Deployment和Service
-
創(chuàng)建 Redis Deployment,YAML文件如下:
apiVersion: apps/v1 kind: Deployment metadata:name: redis-masterlabels:app: redis spec:selector:matchLabels:app: redisrole: mastertier: backendreplicas: 1template:metadata:labels:app: redisrole: mastertier: backendspec:containers:- name: masterimage: redisresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379執(zhí)行命令,以創(chuàng)建 Redis Deployment
kubectl apply -f https://kuboard.cn/statics/learning/ptc/port-forward/redis-master-deployment.yaml執(zhí)行命令,查看Pod狀態(tài):
kubectl get pods輸出結(jié)果如下:
NAME READY STATUS RESTARTS AGE redis-master-765d459796-258hz 1/1 Running 0 50s執(zhí)行命令,查看 Deployment狀態(tài):
kubectl get deployment輸出結(jié)果如下
NAME READY UP-TO-DATE AVAILABLE AGE redis-master 1/1 1 1 55s執(zhí)行命令,查看ReplicaSet狀態(tài)
kubectl get rs輸出結(jié)果如下:
NAME DESIRED CURRENT READY AGE redis-master-765d459796 1 1 1 1m -
創(chuàng)建Redis服務(wù),YAML文件如下所示:
apiVersion: v1 kind: Service metadata:name: redis-masterlabels:app: redisrole: mastertier: backend spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: mastertier: backend執(zhí)行命令,創(chuàng)建Service
kubectl apply -f https://kuboard.cn/statics/learning/ptc/port-forward/redis-master-service.yaml執(zhí)行命令,檢查Service創(chuàng)建結(jié)果
kubectl get svc | grep redis輸出結(jié)果如下所示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE redis-master ClusterIP 10.100.0.213 <none> 6379/TCP 27s -
驗(yàn)證 Redis Service已經(jīng)運(yùn)行,并監(jiān)聽了 6379 端口
kubectl get pods redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'請(qǐng)將 redis-master-765d459796-258hz 替換成你實(shí)際 redis 的名字 輸出結(jié)果如下所示:
6379
轉(zhuǎn)發(fā)本地端口到Pod的端口
-
使用 kubectl port-forward 命令,用戶可以使用資源的名稱來(lái)進(jìn)行端口轉(zhuǎn)發(fā)。下面的命令中的任意一行,都可以實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的效果:
# 這幾個(gè)命令執(zhí)行任意一個(gè)即可 kubectl port-forward redis-master-765d459796-258hz 7000:6379 kubectl port-forward pods/redis-master-765d459796-258hz 7000:6379 kubectl port-forward deployment/redis-master 7000:6379 kubectl port-forward rs/redis-master 7000:6379 kubectl port-forward svc/redis-master 7000:6379以上命令的輸出結(jié)果類似:
I0710 14:43:38.274550 3655 portforward.go:225] Forwarding from 127.0.0.1:7000 -> 6379 I0710 14:43:38.274797 3655 portforward.go:225] Forwarding from [::1]:7000 -> 6379 -
啟動(dòng) Redis 命令行:
redis-cli -p 7000 -
在Redis命令行工具的提示符下,輸入 ping 命令,如下所示:
127.0.0.1:7000>pingRedis 服務(wù)器將返回 PONG
總結(jié)
本機(jī) 7000 端口的連接被轉(zhuǎn)發(fā)到集群中 Redis Server 所在 Pod 的 6379 端口。當(dāng)此連接存在時(shí),您可以使用您自己的機(jī)器上的客戶端對(duì)部署在集群中的 Redis Server 進(jìn)行 Debug。
提示
- 由于一些限制,port-forward 目前只支持 TCP 協(xié)議,issue 47862 (opens new window)用來(lái)跟進(jìn)對(duì) UDP 協(xié)議的支持。
- MySQL數(shù)據(jù)庫(kù)等使用 TCP 協(xié)議的部署在K8S集群中的服務(wù)器,都可以使用此方式進(jìn)行 DEBUG
參考鏈接:
https://kuboard.cn/learning/k8s-practice/access/port-forward.html
總結(jié)
以上是生活随笔為你收集整理的k8s使用port-forward访问集群中的应用程序(只能在执行命令的机器上开放端口)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【网址收藏】全网最详细的 K8s Ser
- 下一篇: Helm部署ElasticSearch