每个节点的pod也有自己的ip但是不固定,随着pod的销毁、跟新IP都会变化。Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡,无论是外部请求还是集群内部请求都需要通过serviceAPI这个入口进行访问。
    image.png
    编号为1、2、3的pod相当于三个副本,例如一个web项目当一个前端pod想访问后端这三个pod副本,service会启用负载均衡将请求合理的分配到一个或几个pod中执行。
    image.png
    image.png
    端口暴露是对deployment资源进行操作,见deployment,执行代码后会把kind为deployment的web.yaml转变为新的类型为service的web1.yaml文件,即端口暴露其实指向的是service的type,后面如果需要继续更改可以继续使用代码更改(不再需要加上后面那段生成新文件命令,直接对原文件修改),或者进入web1.yaml文件设置type进行修改。如果为ClusterIP的方式是集群内部通过虚拟IP(clusterIP)+端口号进行应用访问,默认端口80(如果是nginx则通过IP就可以直接访问,因为nginx端口号为80),如果为Nodeport方式是外部通过节点ip+外部访问端口号对集群中该service进行访问,此时PORT属性会多出外部访问端口号(例:80:3444)。
    image.png
    image.png

    ingress
    image.png
    nodeport缺陷怎么理解呢,就是如果直接启用NodePort,那我们可以通过任意node的ip加端口号的形式请求到service然后通过service访问某个pod中的应用,启一个需要外部访问的应用就得对外暴露所有node的端口,不安全,而通过ingress(装载所有配置的域名),每个域名按照规则指向一个service,通过service负载均衡将请求分发到某个node的某个pod中去,除了自身端口需要暴露,其他应用端口不需要暴露。此外如果按照传统方式,当新增加一个服务时,需要在流量入口加一个反向代理指向新服务,而如果用了Ingress,只需要配置好这个服务,当服务启动时,会自动注册到Ingress的中,不需要额外的操作。
    image.pngimage.png
    其中ingress-con.yaml是准备好的文件,此文件将ingress创建在ingress-nginx的命名空间中,然后创建规则,规则配置文件也是准备好的,如下方右侧图
    image.pngimage.png
    域名匹配并测试:
    image.png
    相关指令:
    image.png