1.K8S service的类型
(1)ClusterIP
(2)NodePort
(3)LoadBalancer
(4)ExternalName
2.具体描述。
(1)ClusterIP
# CluserIP : 向集群内部暴露一个IP,外部无法访问
# 修改type=CluserIP
向集群内部暴露一个IP,外部无法访问,随机ip
type: CluserIP
CluserIP: None
CluserIP:集群内网ip
无头service就是CluserIP没有的service,主要作用:因为访问可以直接用ingress域名端口转发,
所以可以不使用内网ip,占ip资源。一般给ingress使用
(2)NodePort
# NodePort : 在宿主主机中开启一个端口与负载均衡IP的端口一一对应,
外界可以使用宿主主机的端口访问集群内部服务,端口随机,也可以固定端口。
一般测试用,正式环境不实用,因为端口占用严重
在宿主主机中开启一个端口与负载均衡IP的端口一一对应,外界可以使用宿主主机的
端口访问集群内部服务,端口随机,也可以固定端口。一般测试用,正式环境不实用,
因为端口占用严重
NodePort服务是让外部请求直接访问服务的最原始方式,NodePort是在所有的节点上
开放指定的端口,所有发送到这个端口的请求都会直接转发到服务中的pod里;
这种方式不足:
1.一个端口只提供一个服务使用
2.只能使用30000-32767之间的端口
3.如果节点/虚拟机的IP地址发送变化,需要人工处理;
所以在生产环境,不推荐这种方式发布服务
(3)LoadBalancer
# LoadBalancer:是实现暴露服务的另一种解决方案,它依赖于公有云弹性IP实现.
依赖于弹性ip向集群外部暴露服务的负载均衡.
(4)ExternalName
# ExternalName service 是sercice的一个特例,它没有选择器,也没有定义任何端口。
它的作用是返回集群外service的外部别名。它将外部地址经过集群内部的再一次封装
(实际上就是集群DNS服务器将CNAME解析到外部地址上),实现了集群内部访问即可。
例如你们公司的镜像仓库,最开始时用ip访问,等到后面域名下来了再使用域名访问。
你不可能去修改每处的引用。但是可以创建一个ExternalName,首先指向到IP,
等后面再指向域名.
service主要作用:提供负载均衡
ingress主要作用:提供域名转发
ExternalName:将其他链接设置一个集群内部的别名。代码里面使用内部的别名。
链接资源有变化,只需要修改链接,别名不用修改。否则需要大量的修改。
无缝迁移。类似把其他链接定义一个全局变量,代码内部使用变量,
全局变量可以在配置文件修改.