service mesh 開源實現 istio安裝測試
簡介
istio
是一個service mesh
開源實現,由Google/IBM/Lyft共同開發。與之類似的還有conduit
,但是功能不如istio
豐富穩定。架構圖如下:
image
安裝
# 去下面的地址下載壓縮包# tar xf istio-0.7.1-linux.tar.gz# 使用官方的安裝指令碼安裝curl -L | sh -# 安裝配置環境變數mv istio-0.7.1 /usr/local/ ln -sv /usr/local/istio-0.7.1 /usr/local/istioecho 'export PATH=/usr/local/istio/bin:$PATH' > /etc/profile.d/istio.shsource /etc/profile.d/istio.sh istioctl version# 如果環境不是雲環境,不支援LoadBalancer# 作如下修改,使得 ingress 監聽在80和443埠# 修改 Istio ingress 使用 NodePort# 修改使用主機埠對映# 使用此修改版本之後,每臺機器只能執行單個例項# 大概在1548-1590行左右cd /usr/local/istio cp install/kubernetes/istio.yaml install/kubernetes/istio.yaml.ori vim install/kubernetes/istio.yaml ...################################# Istio ingress################################apiVersion: v1 kind: Service metadata: name: istio-ingress namespace: istio-system labels: istio: ingress spec: #type: LoadBalancer # 使用NodePort方式 type: NodePort ports: - port: 80# nodePort: 32000 name: http - port: 443 name: https selector: istio: ingress --- apiVersion: extensions/v1beta1#kind: Deployment# 使用DaemonSet部署方式kind: DaemonSet metadata: name: istio-ingress namespace: istio-system spec: #DaemonSet不支援replicas #replicas: 1 template: ... imagePullPolicy: IfNotPresent ports: - containerPort: 80 #主機80埠對映 hostPort: 80 - containerPort: 443 #主機443埠對映 hostPort: 443 ...# 以下兩種選擇一種安裝方式# 安裝不使用認證(不使用tls)kubectl apply -f install/kubernetes/istio.yaml# 安裝使用認證(使用tls)kubectl apply -f install/kubernetes/istio-auth.yaml# 檢視狀態kubectl get svc -n istio-system kubectl get pods -n istio-system
啟用自動注入 sidecar
-
不開啟自動注入部署應用需要使用如下方式的命令
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)
-
開啟自動注入後,使用正常命令即可部署應用
kubectl apply -f samples/bookinfo/kube/bookinfo.yaml
# k8s 1.9 及之後的版本才能使用# 檢視是否支援kubectl api-versions | grep admissionregistration# 除了要滿足以上條件外還需要檢查kube-apiserver啟動的引數# k8s 1.9 版本要確保 --admission-control 裡有 MutatingAdmissionWebhook,ValidatingAdmissionWebhook# k8s 1.9 之後的版本要確保 --enable-admission-plugins 裡有MutatingAdmissionWebhook,ValidatingAdmissionWebhook# 生成所需要的證書./install/kubernetes/webhook-create-signed-cert.sh --service istio-sidecar-injector --namespace istio-system --secret sidecar-injector-certs # 建立配置configmapkubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml# 生成相關yamlcat install/kubernetes/istio-sidecar-injector.yaml | ./install/kubernetes/webhook-patch-ca-bundle.sh > install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml # 安裝webhookkubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml# 檢視kubectl -n istio-system get deployment -listio=sidecar-injector kubectl get namespace -L istio-injection# 測試自動注入# 建立kubectl apply -f samples/sleep/sleep.yaml kubectl get deployment -o wide kubectl get pod# 設定 default namespace 開啟自動注入kubectl label namespace default istio-injection=enabled kubectl get namespace -L istio-injection# 刪除建立的pod,等待重建kubectl delete pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 檢視重建後的pod# 檢視是否有istio-proxy容器kubectl get pod kubectl describe pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 清理kubectl delete -f samples/sleep/sleep.yaml # 關閉自動注入kubectl label namespace default istio-injection-# 關閉部分pod的自動注入功能... template: metadata: annotations: sidecar.istio.io/inject: "false"...
部署官方測試用例
# 啟動(未開啟自動注入)kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)# 啟動(已開啟自動注入)kubectl apply -f samples/bookinfo/kube/bookinfo.yaml# 檢視狀態kubectl get services kubectl get pods kubectl get ingress -o wide
訪問測試
# 命令列訪問測試GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}') curl -o /dev/null -s -w "%{http_code}n" {GATEWAY_URL}/productpage# 瀏覽器訪問測試NODE_PORT=$(kubectl get svc istio-ingress -n istio-system -o jsonpath='{.spec.ports[0].nodePort}') NODE_IP='11.11.11.112'echo {NODE_IP}:${NODE_PORT}/productpage# 使用daemonset方式部署可以使用如下方式訪問# 11.11.11.112為其中一個node節點的ipcurl
清理
# 清理官方用例samples/bookinfo/kube/cleanup.sh# 清理istiokubectl delete -f install/kubernetes/istio.yaml# kubectl delete -f install/kubernetes/istio-auth.yaml
作者:CountingStars_
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3402/viewspace-2820096/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- service mesh istio-1.0 快速安裝體驗
- 暴露 Istio Service Mesh 中的 GatewayGateway
- Istio service mesh示例教程彙總
- Service Mesh之Istio基礎入門
- 企業服務行業如何試水 Istio | Service Mesh Meetup 分享實錄行業
- Kiali——Istio Service Mesh 的可觀察性工具
- Apache RocketMQ 的 Service Mesh 開源之旅ApacheMQ
- Istio在Rainbond Service Mesh體系下的落地實踐AI
- Service Mesh框架對比:Linkerd vs. Istio框架
- 下一代 Service Mesh — istio 架構分析架構
- 下一代 Service Mesh -- istio 架構分析架構
- 教程|使用Istio實現一個Service Mesh以簡化微服務間的通訊模式微服務模式
- service mesh istio微服務實驗之監控日誌與視覺化微服務視覺化
- 理解 Istio Service Mesh 中 Envoy 代理 Sidecar 注入及流量劫持IDE
- 開源 | Service Mesh 資料平面 SOFAMosn 深層揭祕
- 測試jdon2.5 開源專案時安裝錯誤
- Service Mesh模式起源模式
- unity替換mesh測試Unity
- 螞蟻金服 Service Mesh 深度實踐
- 螞蟻金服 Service Mesh 實踐探索
- Service Mesh 在華為公有云的實踐
- Docker for mac 安裝 IstioDockerMac
- Ollama實現開源大模型本地化安裝部署大模型
- 【微服務】開源PaaS Rainbond v3.6.0正式釋出,Service Mesh開箱即用微服務AI
- 安裝測試kafkaKafka
- memcached安裝測試
- mq安裝測試MQ
- sqlserver 安裝測試SQLServer
- Rainbond 5.5 釋出,支援Istio和擴充套件第三方Service Mesh框架AI套件框架
- 安全測試---資源控制怎麼實現?
- Istio 中實現客戶端源 IP 的保持客戶端
- 服務網格 Service Mesh
- Service Mesh技術詳解
- 【實驗】【STATSPACK】Statspack 安裝、測試與使用
- Istio新架構揭秘:環境化Mesh架構
- PHP7透過yum源安裝及效能測試PHP
- Service Mesh實踐指南-周晶-極客時間
- kubernetes實踐之六十五:Service Mesh