阿里雲Kubernetes Service Mesh實踐進行時(1): Istio初體驗
摘要: 本篇文章是系列中的第一篇,主要講述利用阿里雲Kubernetes容器服務,快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。
概述
Istio是一個用於連線/管理以及安全化微服務的開放平臺,提供了一種簡單的方式用於建立微服務網路,並提供負載均衡、服務間認證以及監控等能力,並且關鍵的一點是並不需要修改服務本身就可以實現上述功能。
Istio主要提供以下功能:
- 流量管理: 控制服務之間呼叫的流量和API呼叫; 使得呼叫更可靠,並使網路在惡劣情況下更加健壯;
- 可觀察性: 獲取服務之間的依賴,以及服務呼叫的流量走向; 從而提供快速識別問題的能力;
- 策略執行:控制服務的訪問策略,不需要改動服務本身;
- 服務身份和安全:為網格中的服務提供可驗證身份,並提供保護服務流量的能力,使其可以在不同可信度的網路上流轉;
本篇文章是系列中的第一篇,主要講述利用阿里雲Kubernetes容器服務,快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。
Istio架構
從架構上看,Istio主要分為2個部分,即:
- 控制面板: 管理代理,用於支援流量路由/執行時執行策略等;
- 資料面板: 由一系列的智慧代理(預設為Envoy)構成,用於仲裁和控制服務之間的網路互動;
Proxy/Envoy
Envoy將作為一個獨立的sidecar與相關微服務部署在同一個Kubernetes的pod上,並提供一系列的屬性給Mixer.Mixer以此作為依據執行策略,併發送到監控系統.
這種sidecar代理模型不需要改變任何服務本身的邏輯,並能增加一系列的功能。
Mixer
Mixer負責在服務網格上執行訪問控制和使用策略,並從Envoy代理和其他服務收集遙測資料。代理提取請求級屬性,傳送到Mixer進行評估。
Mixer包括一個靈活的外掛模型,使其能夠接入到各種主機環境和基礎設施後端,從這些細節中抽象出Envoy代理和Istio管理的服務。 後續文章會陸續介紹相關內容。
Pilot
Pilot負責收集和驗證配置並將其傳播到各種Istio元件。它從Mixer和Envoy中抽取環境特定的實現細節,為他們提供使用者服務的抽象表示,獨立於底層平臺。此外,流量管理規則(即通用4層規則和7層HTTP/gRPC路由規則)可以在執行時通過Pilot進行程式設計。
Citadel
提供服務間以及使用者之間的認證,確保不需要修改服務程式碼的前提下增強服務之間的安全性。主要包括以下3個元件:
-
身份識別
- 當Istio執行在Kubernetes時,Auth會使用Kubernetes提供的服務賬號來識別執行服務的主體是誰.
-
key管理
- Auth提供了一個CA自動化生成和管理key和證書.
-
通訊安全
- 服務間的通訊通過Envoy在客戶端和服務端提供tunnel來保證服務呼叫的安全.
下面講述一下在阿里雲Kubernetes容器服務基礎之上,如何快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio。
準備Kubernetes環境
阿里雲容器服務Kubernetes 1.9.7目前已經上線,可以通過容器服務管理控制檯非常方便地快速建立 Kubernetes 叢集。具體過程可以參考建立Kubernetes叢集。
體驗通過應用目錄簡便部署
點選左側的應用目錄
,在右側選中ack-istio
,如下:
點選引數
, 可以通過修改引數配置進行定製化,如下所示定義了通用引數:
Parameter | Description | Default |
---|---|---|
global.hub |
Specifies the HUB for most images used by Istio | registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog |
global.tag |
Specifies the TAG for most images used by Istio | 0.8 |
global.proxy.image |
Specifies the proxy image name | istio-proxyv2 |
global.imagePullPolicy |
Specifies the image pull policy | IfNotPresent |
global.controlPlaneSecurityEnabled |
Specifies whether control plane mTLS is enabled | false |
global.mtls.enabled |
Specifies whether mTLS is enabled by default between services | false |
global.mtls.mtlsExcludedServices |
List of FQDNs to exclude from mTLS | -"kubernetes.default.svc.cluster.local" |
global.rbacEnabled |
Specifies whether to create Istio RBAC rules or not | true |
global.refreshInterval |
Specifies the mesh discovery refresh interval | 10s |
global.arch.amd64 |
Specifies the scheduling policy for amd64 architectures | 2 |
global.arch.s390x |
Specifies the scheduling policy for s390x architectures | 2 |
global.arch.ppc64le |
Specifies the scheduling policy for ppc64le architectures | 2 |
galley.enabled |
Specifies whether Galley should be installed for server-side config validation. Requires k8s >= 1.9 | false |
除了上述通用引數之外,還可以針對不同的模組進行定製,例如是否啟用grafana、prometheus、tracing、weave-scope以及kiali等:
#
# addons configuration
#
grafana:
enabled: true
replicaCount: 1
image: istio-grafana
service:
name: http
type: ClusterIP
externalPort: 3000
internalPort: 3000
....
prometheus:
enabled: true
replicaCount: 1
image:
repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-prometheus
tag: latest
....
tracing:
enabled: true
jaeger:
enabled: true
....
weave-scope:
enabled: true
global:
# global.image: the image that will be used for this release
image:
repository: weaveworks/scope
tag: "1.9.0"
# global.image.pullPolicy: must be Always, IfNotPresent, or Never
pullPolicy: "IfNotPresent"
....
kiali:
enabled: true
replicaCount: 1
image:
repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-kiali
tag: dev
修改之後,在右側選擇對應的叢集、名稱空間(建議新建一個namespace,如istio-system),指定釋出名稱,然後點選部署。
幾分鐘之後,一套用於連線、管理以及安全化微服務的開放平臺Istio例項就可以創建出來。
體驗Istio
點選左側的容器組
,在右側可以檢視到剛建立的Istio相關容器組資訊,如下所示:
點選左側的服務
,在右側可以檢視到剛建立的Istio相關服務提供的訪問地址,如下所示:
預設引數配置下,會啟用以下功能模組:
- 智慧路由
- 故障注入
- 流量轉移
- 分散式跟蹤Open Tracing/Jaeger
- 遙測指標資料收集Prometheus
- 遙測指標資料視覺化Grafana
- 服務圖Service Graph 與Weave支援
- 服務網格監控Kiali
下一篇文章會通過一個官方示例來講述,在阿里雲Kubernetes容器服務基礎之上,如何使用Istio進行微服務開發、管理、保護及監控等。
總結
我們可以利用阿里雲Kubernetes容器服務,快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。歡迎大家使用阿里雲上的容器服務,快速搭建微服務的開放治理平臺Istio,比較簡單地整合到自己專案的微服務開發中。
相關推薦
阿里雲Kubernetes Service Mesh實踐進行時(1): Istio初體驗
摘要: 本篇文章是系列中的第一篇,主要講述利用阿里雲Kubernetes容器服務,快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。 概述 Istio是一個用於連線/管理以及安全化微服務的開放平臺,提供了一種簡單的方式用於建
阿裏雲Kubernetes Service Mesh實踐進行時(1): Istio初體驗
我們 key works code sch 代碼 部署 text 過程 摘要: 本篇文章是系列中的第一篇,主要講述利用阿裏雲Kubernetes容器服務,快速搭建一套用於連接、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。 概述 Istio是一個用
阿里雲Kubernetes服務上使用Tekton完成應用釋出初體驗
Tekton 是一個功能強大且靈活的 Kubernetes 原生開源框架,用於建立持續整合和交付(CI/CD)系統。通過抽象底層實
在阿里雲Kubernetes上使用ENI進行分散式機器學習訓練
概述 模型訓練是機器學習最主要的實踐場景,尤其以使用機器學習框架TensorFlow進行模型訓練最為流行,但是隨著機器學習的平臺由單機變成叢集,這個問題變得複雜了。利用KubeFlow社群的自定義資源TFJob/MPIJob/MxNetJob可以在Kubernetes叢集方便的執行其不同的分散式訓練框架,解
【阿里雲網站日誌分析實踐】通過Log Service日誌服務匯入MaxCompute分析
使用非常簡單。使用者只需要完成2步配置即可以把日誌服務Logstore的日誌資料遷移到MaxCompute中。 避免重複收集工作。由於日誌服務的日誌收集過程已經完成不同機器上的日誌集中化,無需重複在不同機器上收集一遍日誌資料後再匯入到MaxCompute。 充分複用日誌服務內的日誌分類管理工作。使用者可讓
阿里雲Kubernetes服務上從零搭建GitLab+Jenkins+GitOps應用釋出模型的實踐全紀錄
關於GitOps的介紹,可以參考 GitOps:Kubernetes多叢集環境下的高效CICD實踐 1. 在&nbs
阿里雲伺服器搭配寶塔面板進行幾個優化設定來提升效能
使用阿里雲伺服器ECS的朋友很多,可是你知道阿里雲伺服器怎麼樣可以更好的提升效能和速度嗎?今天我要給大家分享的就是如何通過寶塔面板的幾個優化設定來提升阿里雲伺服器ECS效能,或者不能說提升,應該說更好的利用和發揮雲伺服器的效能。如果你還不知道什麼是寶塔面板,可以看下本博前面的文章《[阿里雲伺服器設定教程:安裝
阿里雲Elasticsearch效能優化實踐
Elasticsearch是一款流行的分散式開源搜尋和資料分析引擎,具備高效能、易擴充套件、容錯性強等特點。它強化了Apache Lucene的搜尋能力,把掌控海量資料索引和查詢的方式提升到一個新的層次。本文結合開源社群和阿里雲平臺的實踐經驗,探討如何調優Elastic
胡忠想|微博微服務架構的Service Mesh實踐之路
前言 說到Service Mesh,在如今的微服務領域可謂是無人不知、無人不曉,被很多人定義為下一代的微服務架構。 Service Mesh在誕生不到兩年的時間裡取得令人矚目的發展,在國內外都湧現出一批具有代表性的新產品,最著名的莫過於Google、IBM領導的Istio,也是Service Mesh技術
動態展示二叉搜尋樹之實踐進行時
目錄 一、選題展示 二、思考題目 三、階段一:圖形顯示二叉搜尋樹之插入 1.圖形顯示二叉搜尋樹的要求 2.原博主的程式碼和輸出 四、階段二:圖形顯示二叉搜尋樹之查刪 1.二叉搜尋樹的查詢操作 2.二叉搜尋樹的刪除操作 五、階段三:動態顯示二叉搜尋樹 六、階段四
螞蟻金服 Service Mesh 實踐探索
SOFAMesh是螞蟻金服在ServiceMesh方向上的探索,下面是它高階技術專家敖小劍在QCon上海2018上的演講。 Service Mesh 是一個 基礎設施層,用於處理服務間通訊。現代雲原生應用有著複雜的服務拓撲,服務網格負責在這些拓撲中 實現請求的可靠傳遞。 在實踐
阿里雲linux安裝jmeter並進行壓測
一、阿里雲linux安裝JDK 1、下載安裝JDK jdk官網,選擇linux版本,下載並儲存。 (一)yum安裝 安裝epel的yumyuan yum install epel-release -y 檢視yum源裡當前jdk有哪些版本 yum list | grep openj
centos 7 yum 設定 阿里雲 kubernetes 庫
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x
阿里雲簡訊介面開發實踐(Java)
隨著網際網路的興起,各行各業的需求都在不斷的增加。隨著業務的擴大,企業給使用者傳送簡訊驗證碼的業務,也是如火如荼。在這裡,calvin給各位開發者推薦阿里雲簡訊平臺。原因有二:1.接入較簡單,開發成本低 2.非常穩定,簡訊可達率99%。 &
阿里雲Kubernetes實戰1
前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢
阿里雲Kubernetes實戰2
您目前處於: 前言: 在系列的第一篇文章中,我已經介紹過如何在阿里雲基於kubeasz搭建K8S叢集,通過在K8S上部署gitlab並暴露至叢集外來演示服務部署與發現的流程。文章寫於4月,忙碌了小半年後,我才有時間把後續部分補齊。系列會分為三篇,本篇將繼續部署基礎設施,如j
阿里雲Kubernetes實戰3
前言: 在上一篇文章中,我們已經在K8S叢集部署了Jenkins、Harbor和EFK。作為本系列最後一篇文章,將通過實際案例串聯所有的基礎軟體服務,基於K8S做DevOps。 整體的業務流程如下圖所示: 一、一機多Jenkins Slave 由於業務需要,我們的自動化測試需要基於windo
阿里雲Kubernetes實戰1–叢集搭建與服務暴露
前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢集,但後來還
阿里雲Kubernetes實戰2–搭建基礎服務
前言: 在系列的第一篇文章中,我已經介紹過如何在阿里雲基於kubeasz搭建K8S叢集,通過在K8S上部署gitlab並暴露至叢集外來演示服務部署與發現的流程。文章寫於4月,忙碌了小半年後,我才有時間把後續部分補齊。系列會分為三篇,本篇將繼續部署基礎設施,如jenkins、harbor、efk等,以便為第三
5分鐘在阿里雲Kubernetes服務上搭建jenkins環境並完成應用構建到部署的流水線作業
本文主要演示如何在阿里雲Kubernetes服務上快速搭建jenkins持續整合環境,並基於提供的示例應用快速完成應用原始碼編譯、映象構建和推送以及應用部署的流水線。 先決條件:阿里雲Kubernetes叢集。 一 快速開始 1. 部署jenkins 容器服務-Kubernetes -> 市場