k8s 中向外界提供服务的几种方法port-forward
、NodePort
,以及 更加常用的提供服务的资源ingress。
1 kubectl port-forward service/redis 6379:6379 现在k8s中有一个pod运行在6379,本机访问映射到6379上,它可以针对部署,服务,pod类型,效果相同
启用后会占用当前终端的标准输出,可以在后面添加&
来指定后台运行:
kubectl port-forward service/redis 6379:6379 &
如图在前台运行情况:它会监听虚拟机的127.0.0.1的6379端口转发到port中去从而能访问资源,但没有NodePoint使用的多
更改收听地址:
Kubectl 默认绑定127.0.0.1(IPv4) 和::1(IPv6) 地址上的本地端口。您可以通过在运行命令--address时提供标志来指定自己的 IP 集:port-forward2 NodePort 映射服务到节点端口。
kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1
该标志只接受 IP 地址和localhost关键字。后者被解释为包含127.0.0.1and ,当省略::1时匹配命令的默认值。--address、port-forward
可以将 pod 临时映射出来,一般用于测试资源是否可用,在生产环境并不会大规模应用。
2 服务非代理模式NodePort
相对于上一种port-forward
来说,这一种要正式的多,NodePort
可以将其 转发到所有 k8s 节点的指定端口上 ,并且不会像port-forward
一样在前台运行。
kubectl create deployment redis --image=redis 创建一个部署
kubectl expose deployment redis --type=NodePort --port=6379 暴露一个服务,并且它能实现负载均衡根据集群ip访问不同主机下的指定端口,可以查看服务详情minikube service 加服务名如
,其中url中的ip是pod所在的上层虚拟环境ip地址,虚拟机可以根据这个虚拟ip环境中的port进行资源访问,问题?现在虚拟机加pod所在的虚拟ip才能访问,现在我想虚拟机直接访问下层的虚拟ip的环境,这就用到上面的第一个,使用kubelctl将本地ip和pod资源直接绑定,假设虚拟机环境ip为192.168.56.2,kubectl在该环境下,连接的其他环境的pod,环境ip地址是192.168.67.2,现在使用nodepoint的映射单口加ip直接就能访问,要kubectl访问它所连接到的远程资源,就把它当成代理,监听本地请求然后转发响应,方式如上默认监听是127.0.01的地址如果ip想对外使用可以监听多个,如下:kubectl port-forward service/redis 6379:6379 --address 127.0.0.1,192.168.56.1
kubectl port-forward --address 0.0.0.0 service/redis 6379:6379 使更多虚拟机的ip地址,只要物理机对虚拟机ip能ping通就能访问到目标,前提是虚拟机的防火墙要关闭,本人之前就是没关闭物理机无法访问。systemctl status/stop firewalld 它是centos7以后的默认防火墙。
由于防火墙会被用来实现k8s的网络代理服务如kube-peoxy中就是以防火前模块实现所以这里关闭防火墙可以让物理机访问到虚拟机和minikube中的pod,当如果关闭防火墙就意味着minikube环境失去了对虚拟宿主机的依赖,就无法使用网络,更不可能拉取镜像。
这样你在虚拟机中就可以telnet +ip+端口 物理机也能访问该虚拟机
但是这里有个问题,假如我的 k8s 里运行了多个 web 应用服务器,我总不能让用户通过端口号http://domain:8081
、http://domain:8082
来访问不同的 web 服务吧。能不能处理成http://domain/web1
、http://domain/web2
...这种形式呢?当然可以,这个就是接下来要说的Ingress
。
4 使用ssh连接,密钥对或者使用密码连接,直接访问目标服务
ssh -f -N -L 35967:localhost:35967 vagrant@虚拟ip,输入密码会在前台阻塞运行,此时就能访问,它也不能能绕过防火墙,因为它需要kubectl在虚拟机暴露的端口,但可以直接连接minikube来绕过防火墙,直接物理机和目标连接者访问,不需要绕来绕去,转来转去。
3 通过 Ingress 暴露服务:nblogs.com/gaoyanbing/p/14031522✌