k8s使用port-forward访问集群中的应用程序(只能在执行命令的机器上开放端口)
2023-09-14 09:01:51 时间
k8s使用port-forward访问集群中的应用程序
本文描述了如何使用 kubectl port-forward
访问 Kubernetes 集群中的 Redis Server。这种连接方式在实际进行Debug时非常有效。
为Redis创建Deployment和Service
-
创建 Redis Deployment,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
执行命令,以创建 Redis Deployment
kubectl apply -f https://kuboard.cn/statics/learning/ptc/port-forward/redis-master-deployment.yaml
执行命令,查看Pod状态:
kubectl get pods
输出结果如下:
NAME READY STATUS RESTARTS AGE redis-master-765d459796-258hz 1/1 Running 0 50s
执行命令,查看 Deployment状态:
kubectl get deployment
输出结果如下
NAME READY UP-TO-DATE AVAILABLE AGE redis-master 1/1 1 1 55s
执行命令,查看ReplicaSet状态
kubectl get rs
输出结果如下:
NAME DESIRED CURRENT READY AGE redis-master-765d459796 1 1 1 1m
-
创建Redis服务,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
执行命令,创建Service
kubectl apply -f https://kuboard.cn/statics/learning/ptc/port-forward/redis-master-service.yaml
执行命令,检查Service创建结果
kubectl get svc | grep redis
输出结果如下所示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE redis-master ClusterIP 10.100.0.213 <none> 6379/TCP 27s
-
验证 Redis Service已经运行,并监听了 6379 端口
kubectl get pods redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
请将
redis-master-765d459796-258hz
替换成你实际 redis 的名字 输出结果如下所示:6379
转发本地端口到Pod的端口
-
使用
kubectl port-forward
命令,用户可以使用资源的名称来进行端口转发。下面的命令中的任意一行,都可以实现端口转发的效果:# 这几个命令执行任意一个即可 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
以上命令的输出结果类似:
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
-
启动 Redis 命令行:
redis-cli -p 7000
-
在Redis命令行工具的提示符下,输入
ping
命令,如下所示:127.0.0.1:7000>ping
Redis 服务器将返回
PONG
总结
本机 7000 端口的连接被转发到集群中 Redis Server 所在 Pod 的 6379 端口。当此连接存在时,您可以使用您自己的机器上的客户端对部署在集群中的 Redis Server 进行 Debug。
提示
- 由于一些限制,port-forward 目前只支持 TCP 协议,issue 47862 (opens new window)用来跟进对 UDP 协议的支持。
- MySQL数据库等使用 TCP 协议的部署在K8S集群中的服务器,都可以使用此方式进行 DEBUG
参考链接:
https://kuboard.cn/learning/k8s-practice/access/port-forward.html
相关文章
- K8S 集群部署
- OpenYurt v1.2 亮点速览丨云边流量峰值相比原生 K8s 降低 90%
- k8s pvc pv简单示例
- k8s kube-dns和服务发现
- 【网址收藏】spark on k8s operator github地址
- k8s Service之Headless Service
- [K8s] Kubernetes 集群部署管理方式对比, kops, kubeadm, kubespray
- 【云原生 | Kubernetes 系列】----使用Prometheus监控K8s集群
- k37.第十五章 K8s运维篇-Prometheus监控 (三)
- y45.第三章 Kubernetes从入门到精通 -- k8s中运行web服务(十八)
- (2022版)一套教程搞定k8s安装到实战 | Docker基本命令
- (2022版)一套教程搞定k8s安装到实战 | 生产环境关键性配置
- 七、k8s入门系列----Ingress
- 【博客606】k8s如何查看pod崩溃前的日志及其原理
- k8s搭建DashBoard
- 【K8S系列】第八讲:Kubernetes 之kubectl 常用命令汇总