通過 istio 部署ws,grpc服務(wù)并鏈接外部redis集群

安裝 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ù)
  • 關(guān)于k8s和istio的配置文件
    • 在目錄 kube 下

      ├── 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

完整代碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容