将一组Pods公开为网络服务的抽象方法。
kubectl get pod -o wide
kubectl expose deploy my-dep --port=8000 --target-port=80 # 因为我们要访问的是nginx的80端口,所以目标端口是80,而我们8000端口,前台应用需要访问nginx,暴露的一个统一端口。也可以是其他端口,自己定义好就可以了
假如我们部署的一个前端项目,为了方便,我们在k8s集群中创建一个tomcat容器
kubectl create deploy my-tomcat --image=tomcat
等待pod创建完毕后,我们进入pod内部
相当于,我们的前端项目如果访问nginx,只需要写服务名,+端口,+svc就可以访问到nginx了。这样不用写ip,更加方便快捷。
域名规则:service名字.名称空间.svc。这种规则,只能是集群内部的pod,访问其他pod。集群外部是访问不到的。其实原因是我们暴露端口时候,默认–type=ClusterIP。
暴露端口时,类型默认是ClusterIP,这样暴露出来的端口,只能集群内部访问,集群外部是访问不到的。
NodePort类型,暴露出来的端口,集群外部可以访问到集群内部署的应用。
kubectl delete svc my-dep #删除刚才创建的svc
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort #重新创建一个svc,跟上次不同,这里指定了type
这次不同是,在8000端口后,还有一个30116端口。k8s默认暴露是3000-32768之间的一个端口。这个端口是在三个pod上都开启的。我们可以通过节点的ip,在集群外部可以访问到nginx。我的集群部署的三个节点的ip分别是192.168.0.15, 192.168.0.16, 192.168.0.24
因此,通过指定NodePort类型的方式,暴露端口,集群外部就可以访问到了。