前言
k8s有了kubedns解决了k8s集群内部通过dns域名的方式相互访问容器服务,但是集群内部的域名无法在外部被访问,也没有解决域名7层负载均衡的问题,而nginx-ingress就是为了解决基于k8s的7层负载均衡
nginx-ingress也是已addon方式加入k8s集群,以pod的方式运行,多个副本,高可用
现在一般使用nginx-ingress-controller老的nginx-ingress:0.1已不建议使用
1. 下载镜像
docker pull index.tenxcloud.com/google_containers/nginx-ingress-controller:v0.8.3
docker pull index.tenxcloud.com/google_containers/echoserver:v1.0
docker pull index.tenxcloud.com/google_containers/defaultbackend:v1.0
可以docker tag和docker push到registry.baidu.com上
2. 部署default-http-backend
defaultbackend的用于为ingress controller 响应404不存在的请求,所以在部署nginx-controller之前需要先部署defaultbackend
见附件中的default-http-backend-rc.yaml
$ kubectl create -f default-http-backend-rc.yaml
3. 部署nginx-ingress-controller
获取附件中的ingress-controller-rc.yaml
$ kubectl create -f nginx-ingress-controller-rc.yaml
注意如上的框中的配置务必正确,kubernetes_master的url地址
看下是否部署OK
查看部署在哪个node
浏览器访问或者curl http://10.145.84.68/healthz
4. 验证ingress的域名转发功能
做4件事情进行验证
- 启动两个后端服务echoserver
- 启动后端服务对应的service
- 创建ingress类型的yaml文件,里面配置域名转发规则(这是我们最终想要的功能)
- 验证转发是否生效
4.1 启动后端服务
docker pull index.tenxcloud.com/google_containers/echoserver:v1.0
执行附件中的ingress-example-rc.yaml
kubectl create -f ingress-example-rc.yaml
4.2 启动echoserver对应的service
执行附件中的ingress-example-svc.yaml
kubectl create -f ingress-example-svc.yaml
4.3 创建ingress类型服务
如下图,定义了转发规则,foo.bar.com域名转发到/foo路径下
执行附件中的ingress-example.yaml
执行成功会在nginx-ingress-controller的pod中的/etc/nginx.conf中生成对应的转发规则如下:
说明也同步写入到nginx的配置文件中了
4.4 验证转发是否生效
4.4.1 查看部署的ingress对于后端哪个node上的pod
4.4.2 配置host
4.4.3 浏览器访问 http://foo.bar.com/foo
4.4.4 浏览器访问 http://foo.bar.com
(这个域名没有配置转发,所有找不到资源,404,由第2节的backend进行了处理
参考文献:http://m635674608.iteye.com/blog/2359769
http://blog.csdn.net/xingwangc2014/article/details/51204224