Налаштування кластера Kubernetes

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

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

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

    $ export NAMESPACE=tutorial
  3. Створіть простір імен:

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

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

    Zip
    $ kubectl apply -f @samples/addons@
  6. Створіть ресурс 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
  7. Створіть роль для надання доступу на читання до простору імен 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
  8. Створіть службовий обліковий запис для кожного учасника:

    $ kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ${NAMESPACE}-user
      namespace: $NAMESPACE
    EOF
  9. Обмежте дозволи кожного учасника. Під час навчання учасникам треба тільки створювати ресурси у власному просторі імен та читати ресурси з простору імен 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
  10. Кожен учасник повинен використовувати свій власний файл конфігурації 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
  11. Встановіть змінну середовища KUBECONFIG для файлу конфігурації ${NAMESPACE}-user-config.yaml:

    $ export KUBECONFIG=$PWD/${NAMESPACE}-user-config.yaml
  12. Перевірте, що конфігурація була застосована, вивівши поточний простір імен:

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

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

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

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

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

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

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!