10 深入kubernete-----落地实践深入-----10-1 ingress-----四层代理、session保持、定制配置、流量控制

 深入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...

posted @ 2021-04-01 16:37  王竹笙  阅读(298)  评论(0编辑  收藏  举报