Встановлення віртуальної машини

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

Передумови

  1. Завантажте реліз Istio
  2. Виконайте необхідні специфічні для платформи налаштування
  3. Перевірте вимоги для Podʼів та сервісів
  4. Віртуальні машини повинні мати IP-зʼєднання з ingress gateway у зʼєднувальній сервісній мережі, а також, за бажанням, з кожним podʼом у мережі через L3-мережі, якщо потрібна підвищена продуктивність.
  5. Ознайомтесь з Архітектурою віртуальних машин для отримання загального уявлення про архітектуру інтеграції віртуальних машин в Istio.

Підготовка середовища для посібника

  1. Створіть віртуальну машину.

  2. Встановіть змінні середовища VM_APP, WORK_DIR, VM_NAMESPACE та SERVICE_ACCOUNT на вашій машині, яку ви використовуєте для налаштування кластера. (наприклад, WORK_DIR="${HOME}/vmintegration"):

    $ VM_APP="<назва застосунку, який буде працювати на цій ВМ>"
    $ VM_NAMESPACE="<назва вашого простору імен для сервісів>"
    $ WORK_DIR="<тека для сертифікатів>"
    $ SERVICE_ACCOUNT="<назва службового облікового запису Kubernetes, який ви хочете використовувати для вашої ВМ>"
    $ CLUSTER_NETWORK=""
    $ VM_NETWORK=""
    $ CLUSTER="Kubernetes"
  3. Створіть робочу теку на вашій машині для налаштування кластера:

    $ mkdir -p "${WORK_DIR}"

Встановлення панелі управління Istio

Якщо у вашому кластері вже є панель управління Istio, ви можете пропустити кроки встановлення, але вам все ще потрібно буде відкрити панель управління для доступу віртуальної машини.

Встановіть Istio та експонуйте панель управління в кластері, щоб ваша віртуальна машина могла отримати до неї доступ.

  1. Створіть специфікацію IstioOperator для встановлення.

    $ cat <<EOF > ./vm-cluster.yaml
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      name: istio
    spec:
      values:
        global:
          meshID: mesh1
          multiCluster:
            clusterName: "${CLUSTER}"
          network: "${CLUSTER_NETWORK}"
    EOF
  2. Встановіть Istio.

    $ istioctl install -f vm-cluster.yaml
  3. Розгорніть шлюз east-west:

    Zip
    $ @samples/multicluster/gen-eastwest-gateway.sh@ --single-cluster | istioctl install -y -f -
  4. Експонуйте сервіси всередині кластера через шлюз east-west:

    Експонуйте панель управління:

    Zip
    $ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@

Налаштування простору імен для віртуальної машини

  1. Створіть простір імен, який буде хостити віртуальну машину:

    $ kubectl create namespace "${VM_NAMESPACE}"
  2. Створіть службовий обліковий запис для віртуальної машини:

    $ kubectl create serviceaccount "${SERVICE_ACCOUNT}" -n "${VM_NAMESPACE}"

Створіть файли для передачі на віртуальну машину

Спочатку створіть шаблон WorkloadGroup для віртуальної машини:

$ cat <<EOF > workloadgroup.yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
  name: "${VM_APP}"
  namespace: "${VM_NAMESPACE}"
spec:
  metadata:
    labels:
      app: "${VM_APP}"
  template:
    serviceAccount: "${SERVICE_ACCOUNT}"
    network: "${VM_NETWORK}"
EOF

Далі, використовуйте команду istioctl x workload entry для генерації:

  • cluster.env: Містить метадані, які ідентифікують простір імен, службовий обліковий запис, CIDR мережі та (опціонально) порти вхідного трафіку, які слід захопити.
  • istio-token: Токен Kubernetes, який використовується для отримання сертифікатів з CA.
  • mesh.yaml: Надає ProxyConfig для налаштування discoveryAddress, перевірок стану справності та деяких опцій автентифікації.
  • root-cert.pem: Кореневий сертифікат, що використовується для автентифікації.
  • hosts: Доповнення до /etc/hosts, яке проксі використовуватиме для підключення до istiod для xDS.
$ istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}"

Налаштування віртуальної машини

Виконайте наступні команди на віртуальній машині, яку ви хочете додати до мережі Istio:

  1. Виконайте захищену передачу файлів з "${WORK_DIR}" до віртуальної машини. Який спосіб ви виберете для передачі цих файлів, залежить від вашої політики інформаційної безпеки. Для зручності в цьому посібнику, передайте всі необхідні файли в "${HOME}" на віртуальній машині.

  2. Встановіть кореневий сертифікат у /etc/certs:

    $ sudo mkdir -p /etc/certs
    $ sudo cp "${HOME}"/root-cert.pem /etc/certs/root-cert.pem
  3. Встановіть токен у /var/run/secrets/tokens:

    $ sudo mkdir -p /var/run/secrets/tokens
    $ sudo cp "${HOME}"/istio-token /var/run/secrets/tokens/istio-token
  4. Встановіть пакет, що містить середовище виконання інтеграції Istio для віртуальних машин:

    $ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.3/deb/istio-sidecar.deb
    $ sudo dpkg -i istio-sidecar.deb
  5. Встановіть cluster.env в теку /var/lib/istio/envoy/:

    $ sudo cp "${HOME}"/cluster.env /var/lib/istio/envoy/cluster.env
  6. Встановіть Mesh Config в /etc/istio/config/mesh:

    $ sudo cp "${HOME}"/mesh.yaml /etc/istio/config/mesh
  7. Додайте хост istiod до /etc/hosts:

    $ sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
  8. Передайте права власності на файли в /etc/certs/ та /var/lib/istio/envoy/ до проксі Istio:

    $ sudo mkdir -p /etc/istio/proxy
    $ sudo chown -R istio-proxy /var/lib/istio /etc/certs /etc/istio/proxy /etc/istio/config /var/run/secrets /etc/certs/root-cert.pem

Запуск Istio у віртуальній машині

  1. Запустіть агента Istio:

    $ sudo systemctl start istio

Переконайтеся в успішності роботи Istio

  1. Перевірте журнал /var/log/istio/istio.log. Ви повинні побачити записи, подібні до наведених нижче:

    $ 2020-08-21T01:32:17.748413Z info sds resource:default pushed key/cert pair to proxy
    $ 2020-08-21T01:32:20.270073Z info sds resource:ROOTCA new connection
    $ 2020-08-21T01:32:20.270142Z info sds Skipping waiting for gateway secret
    $ 2020-08-21T01:32:20.270279Z info cache adding watcher for file ./etc/certs/root-cert.pem
    $ 2020-08-21T01:32:20.270347Z info cache GenerateSecret from file ROOTCA
    $ 2020-08-21T01:32:20.270494Z info sds resource:ROOTCA pushed root cert to proxy
    $ 2020-08-21T01:32:20.270734Z info sds resource:default new connection
    $ 2020-08-21T01:32:20.270763Z info sds Skipping waiting for gateway secret
    $ 2020-08-21T01:32:20.695478Z info cache GenerateSecret default
    $ 2020-08-21T01:32:20.695595Z info sds resource:default pushed key/cert pair to proxy
  2. Створіть простір імен для розгортання Service на основі Podʼів:

    $ kubectl create namespace sample
    $ kubectl label namespace sample istio-injection=enabled
  3. Розгорніть HelloWorld Service:

    Zip
    $ kubectl apply -n sample -f @samples/helloworld/helloworld.yaml@
  4. Надсилайте запити з вашої віртуальної машини до Service:

    $ curl helloworld.sample.svc:5000/hello
    Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk

Наступні кроки

Для отримання додаткової інформації про віртуальні машини:

Видалення

Зупиніть Istio у віртуальній машині:

$ sudo systemctl stop istio

Потім видаліть пакет Istio-sidecar:

$ sudo dpkg -r istio-sidecar
$ dpkg -s istio-sidecar

Щоб видалити Istio, виконайте наступну команду:

Zip
$ kubectl delete -n istio-system -f @samples/multicluster/expose-istiod.yaml@
$ istioctl uninstall -y --purge

Простір імен контролера (наприклад, istio-system) стандартно не видаляється. Якщо він більше не потрібен, використовуйте наступну команду для його видалення:

$ kubectl delete namespace istio-system
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

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