6、service(pod对外暴露端口)
6、service(pod对外暴露端口)
4.5 Service
通过上节课的学习,已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务。
虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
- Pod IP 会随着Pod的重建产生变化
- Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
4.5.1 创建集群内部可访问的Service
**前面第5节我们创建的pod 要访问他需要查看他的IP 但是此IP是能集群内部访问 IP还会变化 并且外面环境是无法访问的 **
1 | # 查看dev下面pod信息 |
一. 创建集群内部可以访问的service
1、集群内部访问
环境准备:
1 | apiVersion: apps/v1 # 版本 |
查看deployment
1 | # 查看deployment |
参数:
- –port: 80 程序内部端口
- –target-port:80 需要暴露的端口即80转发到80
- deploy nginx : deployment名称是nginx
- –name=svc-nginx1: 此为pod名称
返回:
- ClusterIP:10.108.11.19 为集群IP 只有集群内部才可以访问
1 | # 创建集群内部可以访问的service |
**此时我们访问就不访问podIP了我们访问service的ip加端口 此时其实是做了一个负载均衡他会随机转发到一个pod去提供服务 **
2、实现集群外部访问
- 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问
- 如果需要创建外部也可以访问的Service,需要修改type为NodePort
- –name=svc-nginx2 ns dev下deployment pod控制器nginx会再创建一个pod名称为svc-nginx2的容器
1 | # 集群外部访问 |
3、删除service
1 | # 删除service |
4、配置方式
创建一个svc-nginx.yaml,内容如下:
需要修改type为NodePort (修改type类型为NodePort即可实现外部访问)
1 | apiVersion: v1 |
然后就可以执行对应的创建和删除命令了:
创建:kubectl create -f svc-nginx.yaml
删除:kubectl delete -f svc-nginx.yaml
小结
至此,已经掌握了Namespace、Pod、Deployment、Service资源的基本操作,有了这些操作,就可以在kubernetes集群中实现一个服务的简单部署和访问了,但是如果想要更好的使用kubernetes,就需要深入学习这几种资源的细节和原理。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment