前言

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

 


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐