作者:行癫
Kubernetes 暴露服务的方式目前只有三种
使用最多最稳定的是:Ingress
LoadBlancer Service、NodePort Service、Ingress
1.Ingress由两部分组成:Ingress Controller 和 Ingress 服务。
-
Ingress Controller 是流量的入口,是一个实体软件, 一般是Nginx 和 Haproxy
-
Ingress 描述具体的路由规则。
-
Ingress Controller 会监听 api server上的 /ingresses 资源 并实时生效。
-
Ingerss 描述了一个或者多个 域名的路由规则,以 ingress 资源的形式存在。
Ingress 描述路由规则, Ingress Controller 实时实现规则。
Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此来达到域名分配置及动态更新的问题。
ingress控制器有两种:nginx和haproxy
总结:
• Ingress Controller 负责实现路由需求, Ingress负责描述路由需求
• Ingress Controller 一个集群可以有多个
• Ingress Controller 通过Configmap设置, Ingress 通过Annotations设置
• Ingress Controller 设置全局规则, Ingress 设置局部规则
• Ingress Controller 可为多个命名空间服务。
• 需求供给分离可以做到权限隔离,又能提供配置能力。
2. NodePort 类型可以将http 服务暴露在宿主机的端口上,以便外部可以访问。
优点:结构简单, 容易理解。
缺点:
一个app 需要占用一个主机端口
端口缺乏管理
L4转发, 无法根据http header 和 path 进行路由转发
3.LoadBlancer Service
- LoadBlancer Service 是 kubernetes 深度结合云平台的一个组件;当使用 LoadBlancer Service暴露服务时,实际上是通过向底层云平台申请创建一个负载均衡器来向外暴露服务。
- LoadBalancer Provider主要有aws、azure、openstack、gce等云平台提供