19.1.3 配置端口转发
集群中的Service
(服务)默认为ClusterIP
类型,该类型的Service
只能在集群内部访问。有时需要对Service进行调试,在不改变Service
配置的情况下,还可以借助kubectl
提供的端口转发能力。
下面我们在一个kind
集群中部署一个ClusterIP
类型的nginx
服务,然后借助kubectl
的端口转发能力实现从主机上访问。
创建集群
首先使用常规的kind create cluster
命令创建一个名字为rainbow
的集群:
部署服务
接着在集群中分别部署一个nginx
的Deployment
和Service
,配置如下所示。
Deployment
的配置:
Service
的配置:
该服务的端口为80
,类型为ClusterIP
,此时是无法在主机上直接访问的。
配置端口转发
接着使用kubectl port-forward
命令启动端口转发:
其参数解释如下:
--namespace
:指定Service
所在的namespace(默认为default);svc/nginx
:指定Service
的类型和名字,也可以使用全称service/nginx
;--address
:指定绑定主机的IP;3001:80
:指定监听主机上的3001
端口,并将消息转发到服务的80
口上;
该命令执行后不会自动退出,显示以上信息就表示成功地在本机和服务的容器之间建立了一条链接,命令终止执行时,该链接会自动中断。
此时访问本机的3001
端口即可访问服务。例如访问localhost
IP:
如果本机配置了外部IP,还可以通过浏览器访问,比如http://x.x.x.x:3001
.
小结
kubectl
的port-forward
本质上是在本地主机和集群中的Pod
之间建立一个用于流量转发的连接,在上面的例子中,我们也可以直接指定Pod
建立连接,比如:
上面的例子中可以指定Service
建立连接,是因为kubectl
会根据Service
查找到后端的Pod
,并最终与Pod建立建立连接。类似的,除了Service
,还可以指定Deployment
,比如:
更多的例子,有兴趣的读者可以查看命令的帮助手册:kubectl port-forward --help
。
参考链接:
port-forward实现原理(英文):https://prefetch.net/blog/2018/02/03/how-the-kubectl-port-forward-command-works/
最后更新于