Kubernetes 暴露服务的有三种方式,分别为 LoadBlancer Service、NodePort Service、Ingress。官网对 Ingress 的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是它定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴漏。 Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,终止SSL,提供基于域名访问的虚拟主机等等。
LoadBlancer Service
LoadBlancer Service 是 Kubernetes 结合云平台的组件,如国外 GCE、AWS、国内阿里云等等,使用它向使用的底层云平台申请创建负载均衡器来实现,有局限性,对于使用云平台的集群比较方便。
NodePort Service
NodePort Service 是通过在节点上暴漏端口,然后通过将端口映射到具体某个服务上来实现服务暴漏,比较直观方便,但是对于集群来说,随着 Service 的不断增加,需要的端口越来越多,很容易出现端口冲突,而且不容易管理。当然对于小规模的集群服务,还是比较不错的。
Ingress
Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等。Nginx Ingress 一般有三个组件组成:
1)ingress是kubernetes的一个资源对象,用于编写定义规则。
2)反向代理负载均衡器,通常以Service的Port方式运行,接收并按照ingress定义的规则进行转发,通常为nginx,haproxy,traefik等,本文使用nginx。
3)ingress-controller,监听apiserver,获取服务新增,删除等变化,并结合ingress规则动态更新到反向代理负载均衡器上,并重载配置使其生效。
以上三者有机的协调配合起来,就可以完成 Kubernetes 集群服务的暴露。
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808114650450-1305289141.png)
1、下载文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
2、修改mandatory.yaml
注意事项:
• 镜像地址修改成国内的: lizhenliang/nginx-ingress-controller:0.20.0
• 使用宿主机网络: hostNetwork: true
• 此文档使用DaemonSet 部署,使每一个node节点都会有一个ingress-controller 容器
3、修改后mandatory.yaml
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808114718810-1340155061.png)
4、部署
kubectl apply -f mandatory.yaml
5、查看pod是否正常
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808114744103-350605305.png)
6、查看service
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808114838579-575267377.png)
eddy-service是我们将用ingress暴露的service,service espoxe过程略。
7、ingress service yaml文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 apiVersion: extensions/v1beta1 2 kind: Ingress 3 metadata: 4 name: eddy-ingress 5 spec: 6 rules: 7 - host: www.black.com 8 http: 9 paths: 10 - backend: 11 serviceName: eddy-nginx 12 servicePort: 85
host部分为自定义的域名
servicename :6部分查看到的service name
8、安装keepalived
略。。。。。在所有的node节点安装keepalived 设置vip为 192.168.1.180
9、查看ingress service
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808115107414-1430600424.png)
10、修改host文件
增加
192.168.1.180 www.black.com
11、利用域名访问
![](https://img2018.cnblogs.com/blog/1337826/201908/1337826-20190808115139177-492226125.png)