設定 Kubernetes 叢集
在本模組中,您將設定已安裝 Istio 的 Kubernetes 叢集,以及在整個教學課程中使用的命名空間。
請確保您可以存取 Kubernetes 叢集。您可以使用 Google Kubernetes Engine 或 IBM Cloud Kubernetes Service。
建立環境變數來儲存您在執行教學課程命令時將使用的命名空間名稱。您可以使用任何名稱,例如
tutorial
。$ export NAMESPACE=tutorial
建立命名空間
$ kubectl create namespace $NAMESPACE
本範例中使用 Kiali 和 Prometheus 附加元件,且需要安裝。所有附加元件都使用下列方式安裝
$ kubectl apply -f @samples/addons@
使用顯示的
kubectl
命令,為這些常見的 Istio 服務建立 Kubernetes Ingress 資源。在本教學的此階段,不需要熟悉這些服務中的每一項。kubectl
命令可以接受內嵌配置,為每個服務建立 Ingress 資源$ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: istio-system namespace: istio-system annotations: kubernetes.io/ingress.class: istio spec: rules: - host: my-istio-dashboard.io http: paths: - path: / pathType: Prefix backend: service: name: grafana port: number: 3000 - host: my-istio-tracing.io http: paths: - path: / pathType: Prefix backend: service: name: tracing port: number: 9411 - host: my-istio-logs-database.io http: paths: - path: / pathType: Prefix backend: service: name: prometheus port: number: 9090 - host: my-kiali.io http: paths: - path: / pathType: Prefix backend: service: name: kiali port: number: 20001 EOF
建立一個角色,提供對
istio-system
命名空間的讀取權限。此角色是為了限制以下步驟中參與者的權限所必需的。$ kubectl apply -f - <<EOF kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: istio-system-access namespace: istio-system rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["get", "list"] EOF
為每個參與者建立一個服務帳戶
$ kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: ${NAMESPACE}-user namespace: $NAMESPACE EOF
限制每個參與者的權限。在本教學中,參與者只需要在其命名空間中建立資源,以及從
istio-system
命名空間讀取資源。即使您使用自己的叢集,為了避免干擾叢集中的其他命名空間,這也是一個好習慣。建立一個角色,允許對每個參與者的命名空間進行讀寫存取。將參與者的服務帳戶綁定到此角色,以及綁定到從
istio-system
讀取資源的角色$ kubectl apply -f - <<EOF kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ${NAMESPACE}-access namespace: $NAMESPACE rules: - apiGroups: ["", "extensions", "apps", "networking.k8s.io", "networking.istio.io", "authentication.istio.io", "rbac.istio.io", "config.istio.io", "security.istio.io"] resources: ["*"] verbs: ["*"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ${NAMESPACE}-access namespace: $NAMESPACE subjects: - kind: ServiceAccount name: ${NAMESPACE}-user namespace: $NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ${NAMESPACE}-access --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ${NAMESPACE}-istio-system-access namespace: istio-system subjects: - kind: ServiceAccount name: ${NAMESPACE}-user namespace: $NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: istio-system-access EOF
每個參與者都需要使用自己的 Kubernetes 設定檔。此設定檔指定叢集詳細資訊、服務帳戶、憑證以及參與者的命名空間。
kubectl
命令使用此設定檔來操作叢集。為每個參與者產生一個 Kubernetes 設定檔
$ cat <<EOF > ./${NAMESPACE}-user-config.yaml apiVersion: v1 kind: Config preferences: {} clusters: - cluster: certificate-authority-data: $(kubectl get secret $(kubectl get sa ${NAMESPACE}-user -n $NAMESPACE -o jsonpath={.secrets..name}) -n $NAMESPACE -o jsonpath='{.data.ca\.crt}') server: $(kubectl config view -o jsonpath="{.clusters[?(.name==\"$(kubectl config view -o jsonpath="{.contexts[?(.name==\"$(kubectl config current-context)\")].context.cluster}")\")].cluster.server}") name: ${NAMESPACE}-cluster users: - name: ${NAMESPACE}-user user: as-user-extra: {} client-key-data: $(kubectl get secret $(kubectl get sa ${NAMESPACE}-user -n $NAMESPACE -o jsonpath={.secrets..name}) -n $NAMESPACE -o jsonpath='{.data.ca\.crt}') token: $(kubectl get secret $(kubectl get sa ${NAMESPACE}-user -n $NAMESPACE -o jsonpath={.secrets..name}) -n $NAMESPACE -o jsonpath={.data.token} | base64 --decode) contexts: - context: cluster: ${NAMESPACE}-cluster namespace: ${NAMESPACE} user: ${NAMESPACE}-user name: ${NAMESPACE} current-context: ${NAMESPACE} EOF
為
${NAMESPACE}-user-config.yaml
設定檔設定KUBECONFIG
環境變數$ export KUBECONFIG=$PWD/${NAMESPACE}-user-config.yaml
透過列印目前的命名空間來驗證設定是否生效
$ kubectl config view -o jsonpath="{.contexts[?(@.name==\"$(kubectl config current-context)\")].context.namespace}" tutorial
您應該在輸出中看到您的命名空間名稱。
如果您是自己設定叢集,請將先前步驟中提到的
${NAMESPACE}-user-config.yaml
檔案複製到您的本機電腦,其中${NAMESPACE}
是您在先前步驟中提供的命名空間名稱。例如,tutorial-user-config.yaml
。您稍後在本教學中將需要此檔案。如果您是講師,請將產生的設定檔傳送給每位參與者。參與者必須將其設定檔複製到其本機電腦。
恭喜,您已為本教學設定好您的叢集!
您已準備好設定本機電腦。