zoukankan      html  css  js  c++  java
  • 10 深入kubernete落地实践深入101 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...

  • 相关阅读:
    Redis
    Redis
    运维
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Spring
  • 原文地址:https://www.cnblogs.com/edeny/p/14607007.html
Copyright © 2011-2022 走看看