首先部署集群的自动LoadBalancer应用MetalLB:
MetalLB简介
MetalLB 是为裸机Kubernetes集群实现的负载均衡器,使用标准路由协议ARP或BGP。Kubernetes官方没有为裸机集群提供网络负载均衡器(LoadBalancer类型的服务)的实现。各家云厂商(GCP、AWS、Azure…)有相应实现,但必须运行在自身的云环境上才能使用,如果没有在受支持的IaaS平台(GCP、AWS、Azure…)上运行,那么负载均衡器在创建时将无限期地保持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 进行 proxy_pass
反向代理,默认会用 HTTP/1.0,你可以显示指定 proxy_http_version 为 1.1
:
***** 也可以使用traefik做代理的方式。
访问:http://xx.xxx.x.xx/productpage