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/v1
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: redis
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
$ kubectl apply -f redis.yaml # 创建deployment
查看pods状态
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-7d557b94bb-fptfd 1/1 Running 0 67s
查看deployment状态
$ kubectl get deployment -n lv
NAME READY UP-TO-DATE AVAILABLE AGE
redis-master 1/1 1 1 2m28s
查看rs状态
$ kubectl get rs -n lv
NAME DESIRED CURRENT READY AGE
redis-master-7d557b94bb 1 1 1 3m4s
创建redis服务
$ cat redis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
app: redis
role: master
tier: backend
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: master
tier: backend
$ kubectl apply -f redis-service.yaml
检查service创建结果
$ kubectl get svc| grep redis
redis-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:6379
kubectl port-forward redis-master-7d557b94bb-fptfd 7000:6379
kubectl port-forward pods/redis-master-7d557b94bb-fptfd 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
输出如下:
Forwarding from 127.0.0.1:7000 -> 6379
查看本地7000端口是否在监听
$ ss -lnptu | grep 7000
tcp LISTEN 0 128 127.0.0.1:7000 *:* users:(("kubectl",pid=57977,fd=6))
访问redis进行测试
$ redis-cli -p 7000
127.0.0.1:7000> ping
PONG
总结
本机 7000 端口的连接被转发到集群中 Redis Server 所在 Pod 的 6379 端口。当此连接存在时,可以使用自己的机器上的客户端对部署在集群中的 Redis Server 进行 Debug。
注: 由于一些限制,port-forward 目前只支持 TCP 协议。