Налаштування кластера Kubernetes
У цьому модулі ви налаштуєте кластер Kubernetes, на якому встановлений Istio, і простір імен для використання протягом ознайомлення з посібником.
Переконайтеся, що у вас є доступ до кластера Kubernetes. Ви можете використовувати Google Kubernetes Engine або IBM Cloud Kubernetes Service.
Створіть змінну середовища для зберігання назви простору імен, який ви будете використовувати при виконанні команд посібника. Ви можете використовувати будь-яке імʼя, наприклад
tutorial
.$ export NAMESPACE=tutorial
Створіть простір імен:
$ kubectl create namespace $NAMESPACE
Встановіть Istio за допомогою профілю
demo
.У цьому прикладі використовуються надбудови Kiali та Prometheus, які потрібно встановити. Усі надбудови встановлюються за допомогою:
$ kubectl apply -f @samples/addons@
Створіть ресурс Ingress Kubernetes для цих загальних сервісів Istio за допомогою команди
kubectl
, як показано нижче. На цьому етапі посібника не обовʼязково бути знайомим з кожним з цих сервісів.Команда
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
Встановіть змінну середовища
KUBECONFIG
для файлу конфігурації${NAMESPACE}-user-config.yaml
:$ 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
. Вам знадобиться цей файл пізніше в навчанні.Якщо ви інструктор, надішліть згенеровані файли конфігурації кожному учаснику. Учасники повинні скопіювати свої файли конфігурації на свої компʼютери.
Вітаємо, ви налаштували свій кластер для навчання!
Ви готові налаштувати локальний компʼютер.