用 Ingress 访问应用程序
通过 Ingress 访问应用程序
什么是 Ingress?
通常情况下,Service 和 Pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 Service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃。而 Ingress 就是为进入集群的请求提供路由规则的集合。
Ingress 可以给 Service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等。为了配置这些 Ingress 规则,集群管理员需要部署一个 Ingress Controller,它监听 Ingress 和 Service 的变化,并根据规则配置负载均衡并提供访问入口。
Pod 与 Ingress 的关系
- 通过label-selector相关联
- 通过Ingress Controller实现Pod的负载均衡
-支持TCP/UDP 4层和HTTP 7层
Ingress 组成:
- ingress controller:将新加入的Ingress转化成Nginx的配置文件并使之生效;
- ingress服务:将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可;
Ingress 工作原理:
ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置,再写到nginx-ingress-control的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后reload一下使配置生效。以此达到域名分配置和动态更新的问题。
实战:通过 Ingress 使的应用程序在互联网可用
创建文件 nginx-deployment.yaml
1 | apiVersion: apps/v1 |
创建文件 nginx-service.yaml
1 | apiVersion: v1 |
创建文件 nginx-ingress.yaml
1 | apiVersion: networking.k8s.io/v1beta1 |
执行命令
1 | kubectl apply -f nginx-deployment.yaml |
检查执行结果
1 | [root@k8s-master ingress]# kubectl get ingress -o wide |