k8s有了kubedns解决了k8s集群内部通过dns域名的方式相互访问容器服务,但是集群内部的域名无法在外部被访问,也没有解决域名7层负载均衡的问题,而nginx-ingress就是为了解决基于k8s的7层负载均衡
nginx-ingress也是已addon方式加入k8s集群,以pod的方式运行,多个副本,高可用
现在一般使用nginx-ingress-controller老的nginx-ingress:0.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上
defaultbackend的用于为ingress controller 响应404不存在的请求,所以在部署nginx-controller之前需要先部署defaultbackend
见附件中的default-http-backend-rc.yaml
$ kubectl create -f default-http-backend-rc.yaml
获取附件中的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件事情进行验证
docker pull index.tenxcloud.com/google_containers/echoserver:v1.0
执行附件中的ingress-example-rc.yaml
kubectl create -f ingress-example-rc.yaml
执行附件中的ingress-example-svc.yaml
kubectl create -f ingress-example-svc.yaml
如下图,定义了转发规则,foo.bar.com域名转发到/foo路径下
执行附件中的ingress-example.yaml
执行成功会在nginx-ingress-controller的pod中的/etc/nginx.conf中生成对应的转发规则如下:
说明也同步写入到nginx的配置文件中了
(这个域名没有配置转发,所有找不到资源,404,由第2节的backend进行了处理
参考文献:http://m635674608.iteye.com/blog/2359769
http://blog.csdn.net/xingwangc2014/article/details/51204224