istio環境搭建for macbook

首先須要搭建docker+k8s環境,如何搭建這裏就再也不贅述,能夠自行搜索。git

打開命令行,運行命令:redis

curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.1.3 sh -

獲取最新版本istio並解壓,docker

接着進入istio目錄:api

cd istio-1.1.3

該目錄下包含:安全

  • 在 install/ 目錄中包含了 Kubernetes 安裝所需的 .yaml 文件
  • samples/ 目錄中是示例應用
  • istioctl 客戶端文件保存在 bin/ 目錄之中。istioctl 的功能是手工進行 Envoy Sidecar 的注入。
  • istio.VERSION 配置文件

將istioctl加入PATH環境變量,這樣就能夠在任何地方運行該命令:app

export PATH=$PWD/bin:$PATH

此時須要安裝helm,來安裝istio到kubernetes集羣:curl

brew install kubernetes-helm

安裝完成以後,進一步安裝tiller:tcp

先給tiller新建一個serviceaccount:分佈式

kubectl apply -f install/kubernetes/helm/helm-service-account.yaml

而後使用helm安裝tiller:ide

helm init --service-account tiller

tiller安裝完成以後,安裝istio-init來對istio進行初始化,主要是一些CRD的建立:

helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system

等一段時間以後,使用以下命令查看,是否有53個CRD被建立:

kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
53

接着建立istio相關組件,因爲istio的ingressgateway的Service默認配置爲LoadBalancer,集羣環境沒有在雲提供商的平臺上,因此須要改爲NodePort對外提供訪問。因此要用如下命令進行安裝:

helm install install/kubernetes/helm/istio --name istio --namespace istio-system --set gateways.istio-ingressgateway.type=NodePort

若是你的機器內存不足,能夠將pilot的內存下降,在上面命令再加一個參數:

--set pilot.resources.requests.memory="512Mi"

當上面命令成功運行以後,能夠經過kubectl命令查看pod和svc的狀態:

kubectl get svc -n istio-system

結果以下:

 

kubectl get pods -n istio-system

結果以下:

此時,istio已經成功安裝到集羣。

若是想要使用istio的sidecar自動注入功能,咱們還須要如下配置:

首先,查看kubernetes的apiserver啓動參數:--admission-control是否包含MutatingAdmissionWebhook和ValidatingAdmissionWebhook兩項,若是沒有須要添加。

而後,要給須要使用自動注入功能的namespace加label

kubectl label namespace default istio-injection=enabled

這時,部署到default中的pod都會自動加上sidecar。

 

這時,istio的環境就已經搭建完成。

官方針對使用istio的Kubernetes環境還有幾項要求:

一、針對建立的Service,啓動的ports下得全部name都要遵循命名規則<協議>[-<後綴>-],其中<協議>部分可選擇範圍包括 grpchttphttp2httpsmongoredistcptls 以及 udp,Istio 能夠經過對這些協議的支持來提供路由能力。例如 name: http2-foo 和 name: http 都是有效的端口名,但 name: http2foo 就是無效的。若是沒有給端口進行命名,或者命名沒有使用指定前綴,那麼這一端口的流量就會被視爲普通 TCP 流量除非顯式的用 Protocol: UDP 聲明該端口是 UDP 端口

二、全部部署相關的Pod必須在containers.ports中使用containerPort明確指定監聽的端口列表,未列出的端口將不會通過istio的Proxy。若是是Deployment、StatefulSet、ReplicationController、DaemonSet等也同樣。

三、全部的Pod不管是否公開端口,都必須關聯到至少一個Service上,若是一個 Pod 綁定多個Service,這些服務不能在同一端口上使用不一樣協議,例如 HTTP 和 TCP。

四、Deployment 、StatefulSet、ReplicationController、DaemonSet等應帶有 app 以及 version 標籤:在使用其進行 Pod 部署的時候,建議顯式的爲加上 app 以及 version 標籤。每一個部署都應該有一個有意義的 app 標籤和一個用於標識其版本的 version 標籤。app 標籤在分佈式追蹤的過程當中會被用來加入上下文信息。Istio 還會用 app 和 version 標籤來給遙測指標數據加入上下文信息

五、Application UID:不能使用RunAsUser: 1337用戶運行Pod

六、NET_ADMIN 功能: 若是集羣中實施了 Pod 安全策略,除非使用 Istio CNI 插件,不然 Pod 必須具備NET_ADMIN功能。請參閱必需的 Pod 功能

相關文章
相關標籤/搜索