Fission x Istio 迸出新滋味
Fission x Istio 整合教學
文章目錄
Fission 是基於 Kubernetes 之上的 Serverless 框架,而 Istio 是前陣子由 Google、IBM、Lyft 共同推出用來管理、連結微服務的開放平台,透過將兩者整合在一起便能夠提供使用者更多強大的功能。
這陣子花了些時間做實驗跟開發將 Fission 跟 Istio 做初步的整合。雖就目前的狀況來說還有許多地方尚待改進,但相信過陣子就能夠將兩者更好的結合在一起了。
若對 Fission 以及 Istio 整合有興趣的人,下面是完整的安裝教學。
- Google Kubernetes Engine: 1.9.2-gke.1 cluster
- Fission: 0.6.0
- Istio: 0.6.0
可用的區域 (ZONE) 可看這裡
$ export ZONE=<zone name>
$ gcloud container clusters create istio-demo-1 \
--machine-type=n1-standard-2 \
--num-nodes=1 \
--no-enable-legacy-authorization \
--zone=$ZONE \
--cluster-version=1.9.2-gke.1
- 設定 kube-system service account 權限
# for system:serviceaccount:kube-system:default
$ kubectl create clusterrolebinding --user system:serviceaccount:kube-system:default kube-system-cluster-admin --clusterrole cluster-admin
- 設定目前使用者的權限
# for current user
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
以下為 Istio 0.6.0 的安裝教學,或者可以參考官方的安裝教學: Quick Start 以及 Sidecar Injection
下載 Istio 0.6.0
$ export ISTIO_VERSION=0.6.0
$ curl -L https://git.io/getLatestIstio | sh -
$ cd istio-0.6.0/
安裝 Istio 相關的 YAML 檔
如果不需要 sidecar 間相互做 TLS 認證:
$ kubectl apply -f install/kubernetes/istio.yaml
或,如果需要彼此做 TLS 認證:
$ kubectl apply -f install/kubernetes/istio-auth.yaml
自動注入 sidecar (istio-proxy)
請確認 admissionregistration
API 是啟用的狀態
$ kubectl api-versions | grep admissionregistration
admissionregistration.k8s.io/v1beta1
安裝 sidecar injection configmap
$ ./install/kubernetes/webhook-create-signed-cert.sh \
--service istio-sidecar-injector \
--namespace istio-system \
--secret sidecar-injector-certs
$ kubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml
安裝 sidecar injector
$ cat install/kubernetes/istio-sidecar-injector.yaml | \
./install/kubernetes/webhook-patch-ca-bundle.sh > \
install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml
$ kubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml
# Check sidecar injector status
$ kubectl -n istio-system get deployment -listio=sidecar-injector
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
istio-sidecar-injector 1 1 1 1 26s
指定 helm 的預設安裝 namespace, 這邊我們用 fission
做範例
$ export FISSION_NAMESPACE=fission
創建 namespace 並且加上對應 Label 方便 Istio 做 sidecar 注入
$ kubectl create namespace $FISSION_NAMESPACE
$ kubectl label namespace $FISSION_NAMESPACE istio-injection=enabled
$ kubectl config set-context $(kubectl config current-context) --namespace=$FISSION_NAMESPACE
透過下列指令安裝 fission
$ helm install --namespace $FISSION_NAMESPACE --set enableIstio=true --name istio-demo https://github.com/fission/fission/releases/download/0.6.0/fission-all-0.6.0.tgz
設定 Fission 相關環境變數
$ export FISSION_ROUTER=$(kubectl --namespace fission get svc router -o=jsonpath='{..ip}')
首先我們建立一個用 Node.js 寫的小程式
建立 function 的執行環境
$ fission env create --name nodejs --image fission/node-env
建立 function
// hello.js
module.exports = async function(context) {
console.log(context.request.headers);
return {
status: 200,
body: "Hello, World!\n"
};
}
$ fission fn create --name h1 --env nodejs --code hello.js --method GET
建立 route
$ fission route create --method GET --url /h1 --function h1
存取 function
$ curl http://$FISSION_ROUTER/h1
Hello, World!
注意: 由於 Istio 0.6.0 的已知問題 issue, 現在 Grafana & Jaeger 只會呈現 TCP-level 的相關資訊。
- Prometheus
$ kubectl apply -f install/kubernetes/addons/prometheus.yaml
$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090
Web Link: http://127.0.0.1:9090/graph
- Grafana
請先安裝 Prometheus
$ kubectl apply -f install/kubernetes/addons/grafana.yaml
$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000
Web Link: http://127.0.0.1:3000/dashboard/db/istio-dashboard
- Jaeger
$ kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml
$ kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686
Web Link: http://localhost:16686
相關文章
- Fission 1.4 更新重點聚光燈
- Fission - Serverless Framework on Kubernetes
- Fission - Serverless Framework For Kubernetes
- 從 Google Kubernetes Engine 移除節點
- Adopting Container and Kubernetes in Production
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email