Встановлення віртуальної машини
Дотримуйтесь цього посібника, щоб розгорнути мережу Istio та підключити до неї віртуальну машину.
Передумови
- Завантажте реліз Istio
- Виконайте необхідні специфічні для платформи налаштування
- Перевірте вимоги для Podʼів та сервісів
- Віртуальні машини повинні мати IP-зʼєднання з ingress gateway у зʼєднувальній сервісній мережі, а також, за бажанням, з кожним podʼом у мережі через L3-мережі, якщо потрібна підвищена продуктивність.
- Ознайомтесь з Архітектурою віртуальних машин для отримання загального уявлення про архітектуру інтеграції віртуальних машин в Istio.
Підготовка середовища для посібника
Створіть віртуальну машину.
Встановіть змінні середовища
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"
$ VM_APP="<назва застосунку, який буде працювати на цій ВМ>" $ VM_NAMESPACE="<назва вашого простору імен для сервісів>" $ WORK_DIR="<тека для сертифікатів>" $ SERVICE_ACCOUNT="<назва службового облікового запису Kubernetes, який ви хочете використовувати для вашої ВМ>" $ # Налаштуйте значення для мультикластерної/множинної мережі за потреби $ CLUSTER_NETWORK="kube-network" $ VM_NETWORK="vm-network" $ CLUSTER="cluster1"
Створіть робочу теку на вашій машині для налаштування кластера:
$ mkdir -p "${WORK_DIR}"
Встановлення панелі управління Istio
Якщо у вашому кластері вже є панель управління Istio, ви можете пропустити кроки встановлення, але вам все ще потрібно буде відкрити панель управління для доступу віртуальної машини.
Встановіть Istio та експонуйте панель управління в кластері, щоб ваша віртуальна машина могла отримати до неї доступ.
Створіть специфікацію
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
Встановіть Istio.
$ istioctl install -f vm-cluster.yaml
$ istioctl install -f vm-cluster.yaml --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_HEALTHCHECKS=true
Розгорніть шлюз east-west:
$ @samples/multicluster/gen-eastwest-gateway.sh@ --single-cluster | istioctl install -y -f -
$ @samples/multicluster/gen-eastwest-gateway.sh@ \ --network "${CLUSTER_NETWORK}" | \ istioctl install -y -f -
Експонуйте сервіси всередині кластера через шлюз east-west:
Експонуйте панель управління:
$ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
Експонуйте панель управління:
$ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
Експонуйте сервіси кластера:
$ kubectl apply -n istio-system -f @samples/multicluster/expose-services.yaml@
Переконайтеся, що простір імен
istio-system
має мітку з визначеною мережею кластера:$ kubectl label namespace istio-system topology.istio.io/network="${CLUSTER_NETWORK}"
Налаштування простору імен для віртуальної машини
Створіть простір імен, який буде хостити віртуальну машину:
$ kubectl create namespace "${VM_NAMESPACE}"
Створіть службовий обліковий запис для віртуальної машини:
$ 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
Спочатку створіть шаблон 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
Щоб дозволити автоматичне створення WorkloadEntry
, завантажте WorkloadGroup
в кластер:
$ kubectl --namespace "${VM_NAMESPACE}" apply -f workloadgroup.yaml
Для автоматичної реєстрації WorkloadEntry
також доступні перевірки стану справності застосунку. Вони мають ті ж API та поведінку, що й Kubernetes Readiness Probes.
Наприклад, для налаштування перевірки на точці доступу /ready
вашого застосунку:
$ 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: "${NETWORK}"
probe:
periodSeconds: 5
initialDelaySeconds: 1
httpGet:
port: 8080
path: /ready
EOF
З цією конфігурацією автоматично згенерований WorkloadEntry
не буде позначений як “Ready”, поки перевірка не пройде успішно.
Далі, використовуйте команду 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}"
$ istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}" --autoregister
Налаштування віртуальної машини
Виконайте наступні команди на віртуальній машині, яку ви хочете додати до мережі Istio:
Виконайте захищену передачу файлів з
"${WORK_DIR}"
до віртуальної машини. Який спосіб ви виберете для передачі цих файлів, залежить від вашої політики інформаційної безпеки. Для зручності в цьому посібнику, передайте всі необхідні файли в"${HOME}"
на віртуальній машині.Встановіть кореневий сертифікат у
/etc/certs
:$ sudo mkdir -p /etc/certs $ sudo cp "${HOME}"/root-cert.pem /etc/certs/root-cert.pem
Встановіть токен у
/var/run/secrets/tokens
:$ sudo mkdir -p /var/run/secrets/tokens $ sudo cp "${HOME}"/istio-token /var/run/secrets/tokens/istio-token
Встановіть пакет, що містить середовище виконання інтеграції Istio для віртуальних машин:
$ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.3/deb/istio-sidecar.deb $ sudo dpkg -i istio-sidecar.deb
Примітка: наразі підтримується лише CentOS 8.
$ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.3/rpm/istio-sidecar.rpm $ sudo rpm -i istio-sidecar.rpm
Встановіть
cluster.env
в теку/var/lib/istio/envoy/
:$ sudo cp "${HOME}"/cluster.env /var/lib/istio/envoy/cluster.env
Встановіть Mesh Config в
/etc/istio/config/mesh
:$ sudo cp "${HOME}"/mesh.yaml /etc/istio/config/mesh
Додайте хост istiod до
/etc/hosts
:$ sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
Передайте права власності на файли в
/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 у віртуальній машині
Запустіть агента Istio:
$ sudo systemctl start istio
Переконайтеся в успішності роботи Istio
Перевірте журнал
/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
Створіть простір імен для розгортання Service на основі Podʼів:
$ kubectl create namespace sample $ kubectl label namespace sample istio-injection=enabled
Розгорніть
HelloWorld
Service:$ kubectl apply -n sample -f @samples/helloworld/helloworld.yaml@
Надсилайте запити з вашої віртуальної машини до Service:
$ curl helloworld.sample.svc:5000/hello Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk
Наступні кроки
Для отримання додаткової інформації про віртуальні машини:
- Налагодження віртуальних машин для усунення проблем із віртуальними машинами.
- Bookinfo з віртуальною машиною для налаштування прикладу розгортання віртуальних машин.
Видалення
Зупиніть Istio у віртуальній машині:
$ sudo systemctl stop istio
Потім видаліть пакет Istio-sidecar:
$ sudo dpkg -r istio-sidecar
$ dpkg -s istio-sidecar
$ sudo rpm -e istio-sidecar
Щоб видалити Istio, виконайте наступну команду:
$ kubectl delete -n istio-system -f @samples/multicluster/expose-istiod.yaml@
$ istioctl uninstall -y --purge
Простір імен контролера (наприклад, istio-system
) стандартно не видаляється. Якщо він більше не потрібен, використовуйте наступну команду для його видалення:
$ kubectl delete namespace istio-system