• K8s配置集群自动LoadBalancer以及IstioGateWay


    首先部署集群的自动LoadBalancer应用MetalLB:

    MetalLB简介

    MetalLB 是为裸机Kubernetes集群实现的负载均衡器,使用标准路由协议ARPBGPKubernetes官方没有为裸机集群提供网络负载均衡器(LoadBalancer类型的服务)的实现。各家云厂商(GCPAWSAzure…)有相应实现,但必须运行在自身的云环境上才能使用,如果没有在受支持的IaaS平台(GCPAWSAzure…)上运行,那么负载均衡器在创建时将无限期地保持pending状态。

    1. 如果在 IPVS 模式下使用 kube-proxy,从 Kubernetes v1.14.2 开始,必须启用严格的 ARP模式。请注意,如果使用 kube-router 作为服务代理,则不需要这个,因为它默认启用严格的 ARP。
    2. kubectl get configmap kube-proxy -n kube-system -o yaml | \
    3. sed -e "s/strictARP: false/strictARP: true/" | \
    4. kubectl apply -f - -n kube-system
    5. wget https://github.com/metallb/metallb/archive/refs/tags/v0.12.1.tar.gz
    6. tar -zxvf metallb-0.12.1.tar.gz
    7. cd metallb-0.12.1/manifests
    8. kubectl apply -f namespace.yaml
    9. kubectl apply -f metallb.yaml
    10. vim metallb.ip.yaml
    11. apiVersion: v1
    12. kind: ConfigMap
    13. metadata:
    14. namespace: metallb-system
    15. name: config
    16. data:
    17. config: |
    18. address-pools:
    19. - name: default
    20. protocol: layer2
    21. addresses:
    22. - 172.23.134.15-172.23.134.50 #负载均衡IP范围,取值是宿主机的IP段地址,不能和现有的宿主机IP有冲突
    23. kubectl apply -f metallb.ip.yaml
    24. 接下来在部署LoadBalance类型的SVC的时候就可以自动被分配EXTERNAL_IP负载均衡IP了

    1、部署Istio官方示例

    $ istioctl install --set profile=demo -y

    ✔ Istio core installed

    ✔ Istiod installed

    ✔ Egress gateways installed

    ✔ Ingress gateways installed(第一道大门)

    ✔ Installation complete

    2、设置default可自动注入Istio

    $ kubectl label namespace default istio-injection=enabled

    namespace/default labeled

    3、部署官方bookinfo示例

    $ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

    service/details created

    serviceaccount/bookinfo-details created

    deployment.apps/details-v1 created

    service/ratings created

    serviceaccount/bookinfo-ratings created

    deployment.apps/ratings-v1 created

    service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created

    deployment.apps/reviews-v2 created

    deployment.apps/reviews-v3 created

    service/productpage created

    serviceaccount/bookinfo-productpage created

    deployment.apps/productpage-v1 created

    4、部署应用于bookinfo项目的Gateway(第二道大门)以及virtual service

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

    gateway.networking.istio.io/bookinfo-gateway created

    virtualservice.networking.istio.io/bookinfo created

    5、

    $ istioctl analyze

    ✔ No validation issues found when analyzing namespace: default.

    6、配置Nginx反向代理到上边K8s的svc资源中istio-system命名空间下的istio-ingressgateway的external-ip上

    1. server {
    2. listen 8088;
    3. server_name localhost;
    4. access_log /var/log/nginx/host_kiali.access.log main;
    5. location / {
    6. proxy_pass http://172.23.134.15:80;
    7. proxy_http_version 1.1; #这里必须使用1.1,不然会报错,istio 常见问题: 返回 426 状态码
    8. proxy_redirect default;
    9. }
    10. error_page 500 502 503 504 /50x.html;
    11. location = /50x.html {
    12. root /usr/share/nginx/html;
    13. }
    14. }

    Istio 使用 Envoy 作为数据面转发 HTTP 请求,而 Envoy 默认要求使用 HTTP/1.1 或 HTTP/2,当客户端使用 HTTP/1.0 时就会返回 426 Upgrade Required

    常见的 nginx 场景

    如果用 nginx 进行 proxy_pass 反向代理,默认会用 HTTP/1.0,你可以显示指定 proxy_http_version 为 1.1:

    ***** 也可以使用traefik做代理的方式。

    访问:http://xx.xxx.x.xx/productpage

  • 相关阅读:
    【iOS】—— autoreleasePool以及总结
    Maven的常用命令管理项目的生命周期
    分享物流跟踪提醒的设置方法
    QT creator与VS2019 QT加载模块方法
    HBase 的安装与部署
    13 redis中的复制的拓扑结构
    HTML 转 EXE 工具(HTML App Build)
    mysql-norebuild的ddl测试
    XSS攻击(1), 测试XSS漏洞, 获取cookie
    AlphaFold2源码解析(4)--模型架构
  • 原文地址:https://blog.csdn.net/sunjinyan_1/article/details/126042464