Ingress基本认识
-
在之前我们通过Service的类型 ClusterIP、NodePort、LoadBlance中的NodePort实现端口的暴露,实现任意node节点+暴露的端口实现pod的访问
-
这种方式就有一个缺陷
-
我们所暴露的那个端口,在每个节点上都会被占用,也就是一个端口在集群中只能对应一个应用,只能使用一次
-
实际访问中,一般我们都是通过域名来访问,然后根据域名来跳转到固定的ip,实现服务访问
-
这时候,NodePort这种方式就出现了弊端,我该如何通过域名实现负载均衡访问我所有的pod呢?
-
-
ingress的出现就解决了这个尴尬问题
Ingress的工作流程
Ingress和Pod的关系
-
通过上图我们可以知道
-
ingress是通过Service和pod关联的
-
service是通过标签labels关联pod的
-
-
ingress作为统一的入口,会维护很多的域名
-
这些域名与Service进行关联
-
实现一个域名与多个pod进行关联,实现负载均衡
-
-
部署并使用:Ingress
环境初始化
-
我们创建一个测试的pod
-
kubectl create deployment webnginx --image nginx
-
-
暴露我们创建的pod
-
kubectl expose deployment webnginx --port 80 --target-port 80 --type NodePort
-
这个时候我们已经可以通过节点IP + 暴露的端口进行访问服务了
-
部署ingress
-
然后就是部署Ingress了,这里我们使用官方维护的nginx控制器,实现部署
-
-
kubectl apply -f ingress-controller.yaml
-
-
查看ingress部署信息
-
然后我们查看一下该pod
-
该资源编排文件是创建了一个名称空间的
-
所以我们需要制定名称空间去查看
-
-
查看ingress的pod部署信息
-
kubectl get pods -n ingress-nginx
-
配置ingress规则
-
ingress是创建好了,至于上面我们画的流程图该如何实现了,这就需要我们手动去配置实现了
-
-
然后我们可以来解读一下里面配置的规则
-
-
部署ingress-rule.yaml
我们可以看到ingress 部署到了node1节点
此时我们想要在浏览器进行访问,需要在win10的hosts文件中配置一下路由规则
因为我们的服务不是在公网,所以需要做以下操作,做域名映射
修改:C:WindowsSystem32driversetchosts 文件
前面是我们部署ingress Pod的节点ip,后面是我们部署的ingress规则监听的域名
测试
-
我们再次查看一下ingress的服务以及监听的端口
-
然后我们使用浏览器开始访问