12 KiB
| title | overview | weight | owner | test |
|---|---|---|---|---|
| Налаштування кластера Kubernetes | Налаштуйте ваш кластер Kubernetes для посібника. | 2 | istio/wg-docs-maintainers | no |
{{< boilerplate work-in-progress >}}
У цьому модулі ви налаштуєте кластер Kubernetes, на якому встановлений Istio, і простір імен для використання протягом ознайомлення з посібником.
{{< warning >}} Якщо ви на майстер-класі та інструктори надають кластер, перейдіть до налаштування вашого локального компʼютера. {{</ warning >}}
-
Переконайтеся, що у вас є доступ до кластера Kubernetes. Ви можете використовувати Google Kubernetes Engine або IBM Cloud Kubernetes Service.
-
Створіть змінну середовища для зберігання назви простору імен, який ви будете використовувати при виконанні команд посібника. Ви можете використовувати будь-яке імʼя, наприклад
tutorial.{{< text bash >}} $ export NAMESPACE=tutorial {{< /text >}}
-
Створіть простір імен:
{{< text bash >}} $ kubectl create namespace $NAMESPACE {{< /text >}}
{{< tip >}} Якщо ви інструктор, вам слід виділити окремий простір імен для кожного учасника. Посібник підтримує роботу в кількох просторах імен одночасно для кількох учасників. {{< /tip >}}
-
Встановіть Istio за допомогою профілю
demo. -
У цьому прикладі використовуються надбудови Kiali та Prometheus, які потрібно встановити. Усі надбудови встановлюються за допомогою:
{{< text bash >}} $ kubectl apply -f @samples/addons@ {{< /text >}}
{{< tip >}} Якщо виникають помилки при спробі встановити надбудови, спробуйте знову виконати команду. Можуть бути проблеми з таймінгом, які вирішаться при повторному виконанні команди. {{< /tip >}}
-
Створіть ресурс Ingress Kubernetes для цих загальних сервісів Istio за допомогою команди
kubectl, як показано нижче. На цьому етапі посібника не обовʼязково бути знайомим з кожним з цих сервісів.Команда
kubectlможе приймати конфігурацію в рядку для створення ресурсів Ingress для кожного сервісу:{{< text bash >}} $ 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 {{< /text >}}
- host: my-istio-dashboard.io
http:
paths:
-
Створіть роль для надання доступу на читання до простору імен
istio-system. Ця роль необхідна для обмеження дозволів учасників в кроках нижче.{{< text bash >}} $ 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 {{< /text >}}
-
Створіть службовий обліковий запис для кожного учасника:
{{< text bash >}} $ kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: ${NAMESPACE}-user namespace: $NAMESPACE EOF {{< /text >}}
-
Обмежте дозволи кожного учасника. Під час навчання учасникам треба тільки створювати ресурси у власному просторі імен та читати ресурси з простору імен
istio-system. Це хороша практика, навіть якщо ви використовуєте власний кластер, уникати втручання в інші простори імен у вашому кластері.Створіть роль для надання доступу на читання та запис у простір імен кожного учасника. Прив’яжіть службовий обліковий запис учасника до цієї ролі та до ролі для читання ресурсів з
istio-system:{{< text bash >}} $ 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 {{< /text >}}
-
Кожен учасник повинен використовувати свій власний файл конфігурації Kubernetes. Цей файл конфігурації вказує деталі кластера, службовий обліковий запис, облікові дані та простір імен учасника. Команда
kubectlвикористовує файл конфігурації для роботи з кластером.Згенеруйте файл конфігурації Kubernetes для кожного учасника:
{{< tip >}} Ця команда передбачає, що ваш кластер має назву
tutorial-cluster. Якщо ваш кластер має іншу назву, замініть усі посилання на назву вашого кластера. {{</ tip >}}{{< text bash >}}
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 {{< /text >}}
- cluster:
certificate-authority-data:
-
Встановіть змінну середовища
KUBECONFIGдля файлу конфігурації${NAMESPACE}-user-config.yaml:{{< text bash >}}
export KUBECONFIG=$PWD/{NAMESPACE}-user-config.yaml {{< /text >}} -
Перевірте, що конфігурація була застосована, вивівши поточний простір імен:
{{< text bash >}}
kubectl config view -o jsonpath="{.contexts[?(@.name==\"(kubectl config current-context)")].context.namespace}" tutorial {{< /text >}}Ви повинні побачити імʼя вашого простору імен у виводі.
-
Якщо ви налаштовуєте кластер для себе, скопіюйте файл
${NAMESPACE}-user-config.yaml, згаданий у попередніх кроках, на ваш компʼютер, де${NAMESPACE}— це імʼя простору імен, яке ви вказали в попередніх кроках. Наприклад,tutorial-user-config.yaml. Вам знадобиться цей файл пізніше в навчанні.Якщо ви інструктор, надішліть згенеровані файли конфігурації кожному учаснику. Учасники повинні скопіювати свої файли конфігурації на свої компʼютери.
Вітаємо, ви налаштували свій кластер для навчання!
Ви готові налаштувати локальний компʼютер.