service 是 k8s 暴露http服务的默认方式, 其中 NodePort 类型可以将http 服务暴露在宿主机的端口上,以便外部可以访问。 service模式的结构如下.
service -> label selector -> pods
31217 -> app1 selector -> app1 1234
31218 -> app2 selector -> app2 3456
31218 -> app2 selector -> app2 4567
结构简单, 容易理解。
在service 之前加了一层ingress,结构如下
ingress -> service -> label selector -> pods
www.app1.com -> app1-service -> app1 selector -> app1 1234
80 -> www.app2.com -> app2-service -> app2 selector -> app2 3456
www.app3.com -> app3-service -> app3 selector ->app3 4567
Ingress 的实现分为两个部分 Ingress Controller 和 Ingress .
Ingress Controller 会监听 api server上的 /ingresses 资源 并实时生效。
Ingerss 描述了一个或者多个 域名的路由规则,以 ingress 资源的形式存在。
简单说: Ingress 描述路由规则, Ingress Controller 实时实现规则。
k8s 有一个贯穿始终的设计理念,即需求和供给的分离。 Ingress Controller和 Ingress 的实现也很好的实践了这一点。 要理解k8s ,时刻记住 需求供给分离的设计理念。
我们以nginx-ingress 为例. 我们可以设置如下几个全局参数
这里只列出了部分, 更多请参考文档 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/configmap.md
两种方式 configmap 和 custom template。 custom template 用来设置configmap不能设置的一些高级选项, 通常情况下,使用configmap 已经够用。
使用configmap 需要确保Ingress Controller时,启用了 configmap参数
我们以nginx-ingress 为例. 我们可以设置如下几参数
Ingress只能通过Annotations 进行设置。并且需要确保 Ingress Controller 启动时, 启用了 Annotations 选项
如此可以实现权限的隔离, 又可以提供配置能力 。
nginx-ingress 文档 https://github.com/kubernetes/ingress-nginx