32.B站薪享宏福笔记——第十二章(2)端口转发

12 B站薪享宏福笔记——第十二章

                                  —— Kubernetes 中必备的工具组件

12.2 端口转发

              —— 官方的调试好助手

12.2.1 基本要求

Kubernetes 服务器版本必须不低于版本 [ v1.10 ]

应用场景:调试时,需要外部访问,但因为只是测试,不必耗费资源、精力去创建 service,就可以开启端口转发

# 端口转发命令、pod 名称、转发端口号、-namespace 名称空间、--address 指定绑定的地址(默认绑定到回环接口 127.0.0.1 上,集群外不可访问,当前物理机上才可访问,可以指定 0.0.0.0 ,开启远程访问,或固定某个IP上)
kubectl port-forward <pod_name> <forward_port> --namespace <namespace> --address <IP默认:127.0.0.1>

12.2.2 使用方法

(1)可转发类型

  1.Pod

  2.ReplicaSet

  3.Deployment

  4.Service

(2)转发 Pod

  a.回环接口转发
[root@k8s-master01 12.2]# kubectl run myapp --image=myapp:v1.0 --restart=Never
pod/myapp created
[root@k8s-master01 12.2]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          6s    10.244.58.200   k8s-node02   <none>           <none>
# 集群内可以通过 Pod ip 访问
[root@k8s-master01 12.2]# curl 10.244.58.200
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
# 不指定类型时,默认指定 Pod,物理机端口:Pod 端口,阻塞住当前终端端口,不要占用已经使用的端口(ss -na|grep 30010 查看是否端口占用)
[root@k8s-master01 12.2]# kubectl port-forward myapp 30010:80
Forwarding from 127.0.0.1:30010 -> 80   # 回环端口
Forwarding from [::1]:30010 -> 80       # IPV6 回环端口
# 新开一个 master01 终端,访问本地回环端口 30010 ,可以访问
[root@k8s-master01 ~]# curl localhost:30010
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
# 本地通过回环端口访问后,原终端中出现访问记录,结束转发 Ctrl + c
[root@k8s-master01 12.2]# kubectl port-forward myapp 30010:80
Forwarding from 127.0.0.1:30010 -> 80
Forwarding from [::1]:30010 -> 80
Handling connection for 30010
^C
  b.集群端口转发
# 通过集群外端口暴露,同样阻塞当前端口
[root@k8s-master01 12.2]# kubectl port-forward myapp 30010:80 --address 0.0.0.0
Forwarding from 0.0.0.0:30010 -> 80

浏览器可以通过转发的端口进行访问:192.168.66.11:30010

image

# 浏览器通过集群IP:端口访问后,原终端中出现访问记录,结束转发 Ctrl + c
[root@k8s-master01 12.2]# kubectl port-forward myapp 30010:80 --address 0.0.0.0 Forwarding from 0.0.0.0:30010 -> 80 Handling connection for 30010 Handling connection for 30010 ^C
# 消除实验影响
[root@k8s-master01 12.2]# kubectl delete pod --all
pod "myapp" deleted

(3)转发 Deployment

  a.回环接口转发
[root@k8s-master01 12.2]# kubectl create deployment myapp --image=myapp:v1.0 
deployment.apps/myapp created
[root@k8s-master01 12.2]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
myapp   1/1     1            1           6s
# 本地回环访问,当不指定本地端口时,默认随机分配(避免手动定义的端口被其他应用所占用),下面是随机分配的 45221 端口
[root@k8s-master01 12.2]# kubectl port-forward deployments/myapp :80
Forwarding from 127.0.0.1:45221 -> 80
Forwarding from [::1]:45221 -> 80
# 新开一个 master01 终端,访问本地回环端口 45221 ,可以访问
[root@k8s-master01 ~]# curl localhost:45221
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
# 本地通过回环端口访问后,原终端中出现访问记录,结束转发 Ctrl + c
[root@k8s-master01 12.2]# kubectl port-forward deployments/myapp :80
Forwarding from 127.0.0.1:45221 -> 80
Forwarding from [::1]:45221 -> 80
Handling connection for 45221
^C
  b.集群端口转发
# 通过集群外端口暴露,同样阻塞当前端口,不指定本地端口时,默认随机分配(避免手动定义的端口被其他应用所占用),下面是随机分配的 36203 端口
[root@k8s-master01 12.2]# kubectl port-forward deployments/myapp :80 --address 0.0.0.0
Forwarding from 0.0.0.0:36203 -> 80

浏览器可以通过转发的端口进行访问:192.168.66.11:36203

image

# 浏览器通过集群IP:端口访问后,原终端中出现访问记录,结束转发 Ctrl + c
[root@k8s-master01 12.2]# kubectl port-forward deployments/myapp :80 --address 0.0.0.0
Forwarding from 0.0.0.0:36203 -> 80
Handling connection for 36203
Handling connection for 36203
^C
# 消除实验影响
[root@k8s-master01 12.2]# kubectl delete deployment --all
deployment.apps "myapp" deleted

12.2.3 特别说明

kubectl port-forward 仅实现了 TCP 端口支持。在 (https://github.com/kubernetes/kubernetes/issues/47862)中跟踪了对 UDP 协议的支持

 (已经有计划了,但是需要在主要功能开发完成后,再去开发一些不那么重要的功能)

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-08-05 11:39  马俊南  阅读(56)  评论(0)    收藏  举报