深入Ingress-Nginx
Deployment? https
四层代理 访问控制
定制配置
项目 8-ingress
修改部署ds方式
Deployment 改成 DaemonSet(ds)模式
# 保存controller到文件 kubectl get deploy -n ingress-nginx nginx-ingress-controller -o yaml >> nginx-ingress-controller.yaml # 删除原来的 kubectl delete deploy -n ingress-nginx nginx-ingress-controller # 部署 kubectl apply -f nginx-ingress-controller.yaml kubectl get ds -n ingress-nginx kubectl get pods -n ingress-nginx -o wide # 部署在w1上 # 访问项目没有问题 # http://tomcat.tt.com/ #
节点打标签,就会自动调度起一个新实例。
# w2节点打标签 kubectl label nodes w2 app=ingress # 删除标签 kubectl label nodes w2 app-
# 查看节点,部署ds模式的,自动删除。 kubectl get pods -n ingress-nginx -o wide
四层代理tcp服务使用ingress,做服务发现
# 查看ingress配置 kubectl get cm -n ingress-nginx
# 查看tcp配置 kubectl get cm -n ingress-nginx tcp-services -o yaml #并没有实质性内容 # 创建 kubectl apply -f tcp-config.yaml # 部署w1点,用这个30000,就可以访问这个服务了 netstat -untlp|grep 30000 # 暴露的30000端口访问 http://192.168.1.130:30000/hello?name=8888
# kubectl get svc -n dev -o yaml # tcp-config.yaml 里面的名字配置svc的
自定义配置
#进入ingress容器 docker exec -it 344c861a7f01 bash #nginx配置文件 cat /etc/nginx/nginx.conf # 部署 kubectl apply -f nginx-config.yaml # 再次进入容器中 docker exec -it 344c861a7f01 bash # 查看配置生效 cat /etc/nginx/nginx.conf|grep client_max
具体参数支持,看官网 configmap. https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
hared 全局配置
kubectl apply -f custom-header-global.yaml # 进入容器查看配置 docker exec -it 344c861a7f01 bash cat /etc/nginx/nginx.conf|grep set_header
hared 单独配置
和部署ingress一样kind:Ingress,多了一个。nginx.ingress.kubernetes.io/configuration-snippet: |
kubectl apply -f custom-header-spec-ingress.yaml # 部署之后在 ## start server web-dev.tt.com下面生效 docker exec -it 344c861a7f01 bash cat /etc/nginx/nginx.conf|grep set_headers
配置模板模式
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/custom-template/
1、获取配置模板文件
docker cp f0b6:/etc/nginx/template/nginx.tmpl . # nginx-controller端口 拷贝配置文件模板到当前目录 scp nginx.tmpl 192.168.1.100:/root/deep-in-kubernetes/8-ingress # 拷贝到主节点目录 kubectl create cm nginx-template --from-file nginx.tmpl -n ingress-nginx # 创建 kubectl get cm nginx-template -n ingress-nginx -o yaml # 查看模板文件
2 修改 nginx-ingress-controller.yaml
kubectl apply -f nginx-ingress-controller.yaml
3、修改
kubectl edit cm nginx-template -n ingress-nginx -o yaml #进入容器查看修改参数 www-data@w1:/etc/nginx$ cat /etc/nginx/template/nginx.tmpl |grep size
证书配置
#生成证书。 sh gen-secret.sh # 查看secret配置 kubectl get secret -A kubectl get secret tt-tls -n ingress-nginx -o yaml #增加证书配置后部署 - --default-ssl-certificate=default/tt-tls kubectl apply -f nginx-ingress-controller.yaml kubectl get ingress -A # 查看ingress 端口启动 80 443 # 用https访问。 在浏览器查看证书的内容。 https://web-dev.tt.com/hello?name=ddsdsd # 部署配置哪个域名使用证书。 kubectl apply -f web-ingress.yaml # 访问,则成功 https://web-dev.tt.com/hello?name=ddsdsd
ingress-session 会话保持
kubectl apply -f ingress-session.yaml
浏览器访问则session一个会话保持,访问则是同一个后端。浏览器访问
部署过程中还可能遇到切换小流量 10% 20% 100%逐步打流量。需要升级 ingress 镜像版本 nginx-ingress-controller:0.23.0
kubectl apply -f nginx-ingress-controller.yaml # 升级 这里注释nginx模板配置,和新升级的模板不匹配。要使用nginx模板选择匹配的版本。
canary
weight 流量控制
# 创建命名空间 kubectl create ns canary # 对比 a b的区别 vimdiff web-canary-a.yaml web-canary-b.yaml kubectl apply -f web-canary-a.yaml kubectl apply -f web-canary-b.yaml #创建 ingress kubectl apply -f ingress-common.yaml # 部署流量控制
kubectl apply -f ingress-weight.yaml
访问,90%a服务,10%b服务。 没有问题改成 90%. 访问发部分b服务90%
http://canary.tt.com
#命令行访问 while sleep 0.2;do curl http://canary.tt.com/ && echo ""; done
cookie 流量定向控制 并不让线上用户访问,测试之后在走上线流程
kubectl apply -f ingress-cookie.yaml
全是 访问A版本
while sleep 0.2;do curl http://canary.tt.com/ && echo ""; done
怎样 访问 B服务呢。cookie 设置访问值。 这样就访问到BF服务
#命令行cookie模式,请求则是B服务 curl --cookie 'web-canary: always' http://canary.tt.com
header 流量控制
#header 部署完 kubectl apply -f ingress-header.yaml
cookie模式 访问则不生效 了,访问的则是 A项目
header模式测试,-H header增加头部参数,访问生效到B 服务 # header模式用curl比较方便
curl -H 'web-canary: always' http://canary.tt.com # 访问到B服务 curl http://canary.tt.com # 访问到A服务
组合控制流量方式
header cookie weight 一起使用。 cookie header同时可以使用。
kubectl apply -f ingress-compose.yaml
有 cookie了, 值:always 访问A服务。 值:never 则访问B服务
如果删掉cookie,则按照 weight 流量权重访问。
header优先级更高些。
end...