安裝 docker
安裝單節(jié)點 k8s 環(huán)境
sudo docker run --privileged -d --restart=unless-stopped -p 88:80 -p 433:443 rancher/rancher
訪問 https://宿主機IP:433
新建集群單結(jié)點要把 etcd , control plane ,worker 都給勾選上
復制命令啟動,等待就好了
軟件架構(gòu)

軟件架構(gòu)
準備鏡像
- 網(wǎng)關(guān):ws 服務(wù)
- 服務(wù) V1:grpc 服務(wù)
- 服務(wù) V2:grpc 服務(wù)
- 服務(wù) V3:grpc 服務(wù)
- 在目錄 logic_v3 下
- 鏈接了 Reids 集群
- 關(guān)于k8s和istio的配置文件
-
├── gateway.yaml 部署 gateway(Deployment[k8s]) 服務(wù)和對應(yīng)的 Service(k8s) ├── logic.yaml 部署 logic(Deployment[k8s]) 服務(wù)和對應(yīng)的 Service(k8s) ├── net-gateway.yaml 部署 Gateway(istio) VirtualService(istio) 接受外部請求轉(zhuǎn)發(fā)到 gateway 服務(wù) ├── net-logic.yaml 部署 VirtualService(istio) DestinationRule(istio) 接受 gateway 請求轉(zhuǎn)發(fā)到 logic 服務(wù) └── net-redis.yaml 部署 Service(k8s) Endpoints(k8s) 將外部服務(wù)轉(zhuǎn)發(fā)到內(nèi)部
-
安裝 istio
- https://istio.io/ 建議看英文文檔,中文的更新不及時可以對照著看
istioctl install
kubectl create namespace im
kubectl label namespace im istio-injection=enabled //在這個命名空間下的服務(wù)都會被自動注入 istio proxy
kubectl apply -f <(istioctl kube-inject -f 你的配置文件.yaml) -n 命令空間 //手動注入
- 查看是否有 EXTERNA-IP
kubectl get service -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.43.50.213 <pending> 15021:31954/TCP,80:32725/TCP,443:32687/TCP,15012:30629/TCP,15443:32721/TCP 20m
#如果看到 EXTERNAL-IP 不為真實IP
# 手動指定邊緣網(wǎng)絡(luò)IP在 clusterIP 下輸入
kubectl edit service/istio-ingressgateway -n istio-system
externalIPs:
- 172.13.3.131
kubectl get service -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.43.50.213 172.13.3.131 15021:31954/TCP,80:32725/TCP,443:32687/TCP,15012:30629/TCP,15443:32721/TCP 26m
- 安裝 kiali
kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system
istioctl dashboard kiali
- 安裝 gateway 切換到learnin_tools/istio/kube目錄下
kubectl apply -f gateway.yaml -n im
kubectl apply -f net-gateway.yaml -n im
//更新鏡像
//kubectl set image deploy gateway-v3 gateway=hwholiday/gateway:v3 -n im
kubectl apply -f logic.yaml -n im
kubectl apply -f net-logic.yaml -n im
kubectl apply -f net-redis.yaml -n im
測試 gateway
其他
- Service的DNS(host) 服務(wù)名.命名空間.svc.cluster.local
gateway-v3-7d85c6577f-8xgwz 為pod name
kubectl describe pod/gateway-v3-7d85c6577f-8xgwz -n im
在 istio-proxy 標簽里面能看到
- 查看 gateway 路由規(guī)則
istioctl proxy-config routes istio-ingressgateway-865d46c7f5-2qgdh -n istio-system -o json
- 部署中的自動縮放
kubectl autoscale deployment logic-v1 --cpu-percent=50 --min=1 --max=10 -n im
kubectl get hpa -n im