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

MetalLB简介

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

如果在 IPVS 模式下使用 kube-proxy,从 Kubernetes v1.14.2 开始,必须启用严格的 ARP模式。请注意,如果使用 kube-router 作为服务代理,则不需要这个,因为它默认启用严格的 ARP。

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

wget https://github.com/metallb/metallb/archive/refs/tags/v0.12.1.tar.gz
tar -zxvf metallb-0.12.1.tar.gz
cd metallb-0.12.1/manifests

kubectl apply -f namespace.yaml
kubectl apply -f metallb.yaml

vim metallb.ip.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.23.134.15-172.23.134.50 #负载均衡IP范围,取值是宿主机的IP段地址,不能和现有的宿主机IP有冲突


kubectl apply -f metallb.ip.yaml

接下来在部署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上

server {
    listen       8088;
    server_name  localhost;

    access_log  /var/log/nginx/host_kiali.access.log  main;

    location / {
        proxy_pass http://172.23.134.15:80;
	    proxy_http_version 1.1; #这里必须使用1.1,不然会报错,istio 常见问题: 返回 426 状态码
        proxy_redirect default;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

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

Logo

开源、云原生的融合云平台

更多推荐