K8S叢集部署istio
阿新 • • 發佈:2020-10-29
簡介
Istio 提供一種簡單的方式來為已部署的服務建立網路,該網路具有負載均衡、服務間認證、監控等功能,而不需要對服務的程式碼做任何改動。
istio 適用於容器或虛擬機器環境(特別是 k8s),相容異構架構。
istio 使用 sidecar(邊車模式)代理服務的網路,不需要對業務程式碼本身做任何的改動。
HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡。
istio 通過豐富的路由規則、重試、故障轉移和故障注入,可以對流量行為進行細粒度控制;支援訪問控制、速率限制和配額。
istio 對出入叢集入口和出口中所有流量的自動度量指標、日誌記錄和跟蹤。
對比國內阿里雲和K8S官方維護的Nginx Ingress Controller及 Istio Gateway 比較
Istio Gateway | 阿里雲Ingress Controller | NGINX Ingress Controller | |
根據HTTP Header選擇路由規則 | 支援 | 支援 | 僅支援單個Header,不支援多個Header組合 |
Header規則支援正則表示式 | 支援 | 支援 | 支援 |
服務之間設定權重拆分流量 | 支援 | 支援 | 支援 |
Header和權重規則組合使用 | 支援 | 支援 | 支援 |
路由規則檢查 | 支援 | 不支援 | 不支援 |
路由規則粒度 | service下的不同pod | service | service |
支援的協議 | HTTP1.1/HTTP2/gRPC/TCP/Websockets/MongoDB |
HTTP1.1/HTTP2/gRPC/TCP/Websockets | HTTP1.1/HTTP2/gRPC/TCP/Websockets |
部署istio
1、下載istio官方的部署包網址:https://github.com/istio/istio/releases/tag/1.6.7 wget https://github.com/istio/istio/releases/download/1.6.7/istio-1.6.7-linux-amd64.tar.gz 2、解壓安裝包並加入環境變數中 mkdir /application/ tar xvf istio-1.6.7-linux-amd64.tar.gz -C /application / echo "export PATH=$PATH:/application/istio-1.6.7/bin" >>/etc/profile && source /etc/profile 3、安裝istio(ps:一定要保證k8s叢集正常執行) [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 7d2h v1.18.0 node-1 Ready <none> 7d2h v1.18.0 node-2 Ready <none> 7d2h v1.18.0 [root@k8s-master ~]# 4、安裝 [root@k8s-master bin]# istioctl manifest apply --set profile=demo Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details. ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Egress gateways installed ✔ Addons installed ✔ Installation complete [root@k8s-master bin]#
查詢部署完成情況
[root@k8s-master bin]# kubectl get svc -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE grafana ClusterIP 10.100.91.88 <none> 3000/TCP 2m5s istio-egressgateway ClusterIP 10.106.229.1 <none> 80/TCP,443/TCP,15443/TCP 2m6s istio-ingressgateway LoadBalancer 10.111.48.40 <pending> 15021:30045/TCP,80:31929/TCP,443:31560/TCP,31400:31134/TCP,15443:31166/TCP 2m6s istiod ClusterIP 10.101.173.49 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP 2m30s jaeger-agent ClusterIP None <none> 5775/UDP,6831/UDP,6832/UDP 2m5s jaeger-collector ClusterIP 10.103.41.41 <none> 14267/TCP,14268/TCP,14250/TCP 2m5s jaeger-collector-headless ClusterIP None <none> 14250/TCP 2m5s jaeger-query ClusterIP 10.97.12.213 <none> 16686/TCP 2m5s kiali ClusterIP 10.105.102.92 <none> 20001/TCP 2m5s prometheus ClusterIP 10.98.88.198 <none> 9090/TCP 2m5s tracing ClusterIP 10.97.49.170 <none> 80/TCP 2m5s zipkin ClusterIP 10.111.114.233 <none> 9411/TCP 2m5s [root@k8s-master bin]# kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE grafana-b54bb57b9-4ncvl 1/1 Running 0 2m28s istio-egressgateway-64bc874f5c-bxqb8 1/1 Running 0 2m29s istio-ingressgateway-6b947b8c5d-xdttt 1/1 Running 0 2m29s istio-tracing-9dd6c4f7c-vljvl 1/1 Running 0 2m28s istiod-654b4b468b-lfhgf 1/1 Running 0 2m54s kiali-d45468dc4-q6wbn 1/1 Running 0 2m28s prometheus-77566c9987-285jt 2/2 Running 0 2m28s [root@k8s-master bin]#
設定視覺化介面kiali為外部訪問模式並查詢nodeport號
[root@k8s-master bin]# kubectl patch svc -n istio-system kiali -p '{"spec": {"type": "NodePort"}}' service/kiali patched [root@k8s-master bin]# kubectl describe svc -n istio-system kiali Name: kiali Namespace: istio-system Labels: app=kiali install.operator.istio.io/owning-resource=installed-state install.operator.istio.io/owning-resource-namespace=istio-system operator.istio.io/component=AddonComponents operator.istio.io/managed=Reconcile operator.istio.io/version=1.6.7 release=istio Annotations: Selector: app=kiali Type: NodePort IP: 10.105.102.92 Port: http-kiali 20001/TCP TargetPort: 20001/TCP NodePort: http-kiali 31822/TCP #節點訪問的埠 Endpoints: 10.244.247.6:20001 Session Affinity: None External Traffic Policy: Cluster Events: <none> [root@k8s-master bin]#
訪問node節點加上埠 192.168.200.51:31822
預設登陸賬戶和密碼為admin/admin
在istio上部署測試應用bookinfo
1、開啟sidecar自動注入 kubectl label namespace default istio-injection=enabled 2、使用kubectl部署bookinfo並建立閘道器 kubectl apply -f /application/istio-1.6.7/samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f /application/istio-1.6.7/samples/bookinfo/networking/bookinfo-gateway.yaml 3、設定訪問閘道器的 INGRESS_HOST 和 INGRESS_PORT 變數 查詢是否有外部負載均衡器 kubectl get svc istio-ingressgateway -n istio-system EXTERNAL-IP是none或是pending說明沒有問題
由於我們是本地虛擬機器部署k8s外部沒有外部負載均衡器我們使用nodeport方式
修改istio的閘道器為nodeport模式
kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'
採用nodeport方式暴露istio-ingressgateway
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') #獲取 ingress IP 地址: export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o 'jsonpath={.items[0].status.hostIP}')
查詢URL
echo $INGRESS_HOST:$INGRESS_PORT 192.168.10.112:30637
使用瀏覽器訪問bookinfo
http://192.168.10.112:30637/productpage
重複重新整理可以發現星星發生變化說明部署成功
參考地址: https://blog.csdn.net/weixin_44144334/article/details/107788292 https://developer.aliyun.com/article/636511
如有侵權請及時聯絡刪除