Встановлення віртуальної машини
Дотримуйтесь цього посібника, щоб розгорнути мережу 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.28.1/deb/istio-sidecar.deb $ sudo dpkg -i istio-sidecar.debПримітка: наразі підтримується лише CentOS 8.
$ curl -LO https://storage.googleapis.com/istio-release/releases/1.28.1/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Розгорніть
HelloWorldService:$ 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