举例都是通过阿里云容器服务说明
k8s集群创建的时候默认会创建一个公网SLB,用来给ingress使用.
但是我在创建的时候默认没有☑️公网SLB,所以集群为我创建了一个内网的SLB,所以我的集群路由默认只能转发内网的流量.
根据参考链接的配置成功了补充了一个公网的 Nginx Ingress Controller
,描述下路由的过程.
前提
- 必须有一个公网SLB和运行的集群
我们每创建一个负载均衡的service,都会在SLB上生成一条转发的监控,如下所示
这样我们配置的ingress的service就会在slb上留下2条记录
- 80端口的转发
- 443端口的转发
分别占用了SLB的80和443端口
根据以前的文档,都知道service实际上是不处理流量的,只是根据流量转发到后端的POD进行处理(如何选择POD处理请参考标签和标签选择器),如此一来从SLB来到service流量就进入了 nginx-ingress-lb-outff
对应的POD集合
service(nginx-ingress-lb-outff
)对应的deployment是 nginx-ingress-controller
,它是集群默认为我们创建的,流量到达这一步,经过
这2个pod的转发就到达了我们最终的业务容器.
整个过程就是
浏览器 —-> SLB —-> Service(nginx-ingress-lb-outff) —-> deployment(nginx-ingress-controller) —-> ingress POD —-> 业务容器
那么这一步流量是怎么从 ingress POD** 达到我们的业务容器的呢
结果在 ingress POD 内部找到了一个Nginx,那么肯定是内部的Nginx做了一次流量转发,最终到了我们的业务容器.
看看它的Nginx配置文件
当当当当. 从结果来看就是我们从界面修改路由的时候,ingress controller 会使用lua去修改nginx.