title: 使用port-forward访问集群中的应用程序 #标题tags: port-forward #标签
date: 2020-08-17
categories: k8s # 分类
记录如何使用 kubectl port-forward 访问 Kubernetes 集群中的 redis Server。这种连接方式在实际进行Debug时非常有效。
为redis创建deployment和service
$ cat redis.yaml # 创建yaml文件如下apiVersion: apps/v1kind: Deploymentmetadata:name: redis-masterlabels:app: redisspec:selector:matchLabels:app: redisrole: mastertier: backendreplicas: 1template:metadata:labels:app: redisrole: mastertier: backendspec:containers:- name: masterimage: redisresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379$ kubectl apply -f redis.yaml # 创建deployment
查看pods状态
$ kubectl get podsNAME READY STATUS RESTARTS AGEredis-master-7d557b94bb-fptfd 1/1 Running 0 67s
查看deployment状态
$ kubectl get deployment -n lvNAME READY UP-TO-DATE AVAILABLE AGEredis-master 1/1 1 1 2m28s
查看rs状态
$ kubectl get rs -n lvNAME DESIRED CURRENT READY AGEredis-master-7d557b94bb 1 1 1 3m4s
创建redis服务
$ cat redis-service.yamlapiVersion: v1kind: Servicemetadata:name: redis-masterlabels:app: redisrole: mastertier: backendspec:ports:- port: 6379targetPort: 6379selector:app: redisrole: mastertier: backend$ kubectl apply -f redis-service.yaml
检查service创建结果
$ kubectl get svc| grep redisredis-master ClusterIP 10.96.15.147 <none> 6379/TCP 84s
验证redis service 已经运行,并监听了6379端口
# 请将 redis-master-7d557b94bb-fptfd 替换成你实际 redis 的名字$ kubectl get pods redis-master-7d557b94bb-fptfd --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
转发本地端口到Pod的端口
# 以下几个命令执行任意一个即可$ kubectl port-forward redis-master-7d557b94bb-fptfd 7000:6379kubectl port-forward redis-master-7d557b94bb-fptfd 7000:6379kubectl port-forward pods/redis-master-7d557b94bb-fptfd 7000:6379kubectl port-forward deployment/redis-master 7000:6379kubectl port-forward rs/redis-master 7000:6379kubectl port-forward svc/redis-master 7000:6379
输出如下:
Forwarding from 127.0.0.1:7000 -> 6379
查看本地7000端口是否在监听
$ ss -lnptu | grep 7000tcp LISTEN 0 128 127.0.0.1:7000 *:* users:(("kubectl",pid=57977,fd=6))
访问redis进行测试
$ redis-cli -p 7000127.0.0.1:7000> pingPONG
总结
本机 7000 端口的连接被转发到集群中 Redis Server 所在 Pod 的 6379 端口。当此连接存在时,可以使用自己的机器上的客户端对部署在集群中的 Redis Server 进行 Debug。
注: 由于一些限制,port-forward 目前只支持 TCP 协议。
