istio.io/content/uk/docs/examples/microservices-istio/setup-kubernetes-cluster/index.md

12 KiB
Raw Blame History

title overview weight owner test
Налаштування кластера Kubernetes Налаштуйте ваш кластер Kubernetes для посібника. 2 istio/wg-docs-maintainers no

{{< boilerplate work-in-progress >}}

У цьому модулі ви налаштуєте кластер Kubernetes, на якому встановлений Istio, і простір імен для використання протягом ознайомлення з посібником.

{{< warning >}} Якщо ви на майстер-класі та інструктори надають кластер, перейдіть до налаштування вашого локального компʼютера. {{</ warning >}}

  1. Переконайтеся, що у вас є доступ до кластера Kubernetes. Ви можете використовувати Google Kubernetes Engine або IBM Cloud Kubernetes Service.

  2. Створіть змінну середовища для зберігання назви простору імен, який ви будете використовувати при виконанні команд посібника. Ви можете використовувати будь-яке імʼя, наприклад tutorial.

    {{< text bash >}} $ export NAMESPACE=tutorial {{< /text >}}

  3. Створіть простір імен:

    {{< text bash >}} $ kubectl create namespace $NAMESPACE {{< /text >}}

    {{< tip >}} Якщо ви інструктор, вам слід виділити окремий простір імен для кожного учасника. Посібник підтримує роботу в кількох просторах імен одночасно для кількох учасників. {{< /tip >}}

  4. Встановіть Istio за допомогою профілю demo.

  5. У цьому прикладі використовуються надбудови Kiali та Prometheus, які потрібно встановити. Усі надбудови встановлюються за допомогою:

    {{< text bash >}} $ kubectl apply -f @samples/addons@ {{< /text >}}

    {{< tip >}} Якщо виникають помилки при спробі встановити надбудови, спробуйте знову виконати команду. Можуть бути проблеми з таймінгом, які вирішаться при повторному виконанні команди. {{< /tip >}}

  6. Створіть ресурс 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 >}}
  7. Створіть роль для надання доступу на читання до простору імен 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 >}}
  8. Створіть службовий обліковий запис для кожного учасника:

    {{< text bash >}} $ kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: ${NAMESPACE}-user namespace: $NAMESPACE EOF {{< /text >}}

  9. Обмежте дозволи кожного учасника. Під час навчання учасникам треба тільки створювати ресурси у власному просторі імен та читати ресурси з простору імен 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 >}}
  10. Кожен учасник повинен використовувати свій власний файл конфігурації 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 >}}

  11. Встановіть змінну середовища KUBECONFIG для файлу конфігурації ${NAMESPACE}-user-config.yaml:

    {{< text bash >}} export KUBECONFIG=$PWD/{NAMESPACE}-user-config.yaml {{< /text >}}

  12. Перевірте, що конфігурація була застосована, вивівши поточний простір імен:

    {{< text bash >}} kubectl config view -o jsonpath="{.contexts[?(@.name==\"(kubectl config current-context)")].context.namespace}" tutorial {{< /text >}}

    Ви повинні побачити імʼя вашого простору імен у виводі.

  13. Якщо ви налаштовуєте кластер для себе, скопіюйте файл ${NAMESPACE}-user-config.yaml, згаданий у попередніх кроках, на ваш компʼютер, де ${NAMESPACE} — це імʼя простору імен, яке ви вказали в попередніх кроках. Наприклад, tutorial-user-config.yaml. Вам знадобиться цей файл пізніше в навчанні.

    Якщо ви інструктор, надішліть згенеровані файли конфігурації кожному учаснику. Учасники повинні скопіювати свої файли конфігурації на свої компʼютери.

Вітаємо, ви налаштували свій кластер для навчання!

Ви готові налаштувати локальний компʼютер.