Руководство по развертыванию Istio 1.4

Istio

Оригинальная ссылка:Руководство по развертыванию Istio 1.4

Istio находится в процессе быстрого итеративного обновления, и его метод развертывания также постоянно обновляется.Метод установки, который я представил в версии 1.0 ранее, больше не применим к последней версии 1.4. В будущем основным методом развертывания будет использование istioctl для развертывания, и helm может постепенно отойти в сторону~~

Перед развертыванием Istio сначала необходимо убедиться, что кластер Kubernetes (версия kubernetes рекомендуется в1.13выше) развернул и настроил локальный клиент kubectl.

1. Подготовка среды Kubernetes

Чтобы быстро подготовить среду kubernetes, мы можем использовать sealos для развертывания, шаги следующие:

Предварительные условия

Установить кластер кубернетес

$ sealos init --master 192.168.0.2 \
    --node 192.168.0.3 \
    --node 192.168.0.4 \
    --node 192.168.0.5 \
    --user root \
    --passwd your-server-password \
    --version v1.16.3 \
    --pkg-url /root/kube1.16.3.tar.gz 

Убедитесь, что установка прошла нормально:

$ kubectl get node

NAME       STATUS   ROLES    AGE   VERSION
sealos01   Ready    master   18h   v1.16.3
sealos02   Ready    <none>   18h   v1.16.3
sealos03   Ready    <none>   18h   v1.16.3
sealos04   Ready    <none>   18h   v1.16.3

2. Загрузите файл развертывания Istio.

Вы можете скачать его с GitHubreleaseЗагрузите istio со страницы или загрузите его напрямую с помощью следующей команды:

$ curl -L https://istio.io/downloadIstio | sh -

После завершения загрузки вы получитеistio-1.4.2каталог, который содержит:

  • install/kubernetes: Установочные файлы для платформы Kubernetes.
  • samples: пример приложения
  • bin: двоичный файл istioctl, который можно использовать для ручного внедрения sidecar-прокси.

Войтиistio-1.4.2содержание.

$ cd istio-1.4.2

$ tree -L 1 ./
./
├── bin
├── demo.yaml
├── install
├── LICENSE
├── manifest.yaml
├── README.md
├── samples
└── tools

4 directories, 4 files

скопировать istioctl в/usr/local/bin/середина:

$ cp bin/istioctl /usr/local/bin/

Включить автодополнение для istioctl

bash

будетtoolsКаталогistioctl.bashСкопируйте в каталог $HOME:

$ cp tools/istioctl.bash ~/

существует~/.bashrcДобавьте строку в:

source ~/istioctl.bash

Приложение вступает в силу:

$ source ~/.bashrc

zsh

будетtoolsв каталоге_istioctlСкопируйте в каталог $HOME:

$ cp tools/_istioctl ~/

существует~/.zshrcДобавьте строку в:

source ~/_istioctl

Приложение вступает в силу:

$ source ~/.zshrc

3. Разверните Istio

istioctl предоставляет множество файлов конфигурации установки, которые можно просмотреть с помощью следующей команды:

$ istioctl profile list

Istio configuration profiles:
    minimal
    remote
    sds
    default
    demo

Различия между ними следующие:

default demo minimal sds remote
основные компоненты
istio-citadel X X X X
istio-egressgateway X
istio-galley X X X
istio-ingressgateway X X X
istio-nodeagent X
istio-pilot X X X X
istio-policy X X X
istio-sidecar-injector X X X X
istio-telemetry X X X
Дополнения
Grafana X
istio-tracing X
kiali X
prometheus X X X

какой знакXУказывает, что пришло время установить компонент.

Если вы просто хотите быстро опробовать все функциональные возможности, вы можете напрямую использовать файл конфигурации.demoразвернуть.

Перед официальным развертыванием необходимо объяснить два момента:

Istio CNI Plugin

Текущая реализация по умолчанию перенаправляет трафик пользовательских модулей на прокси-сервер с использованием привилегированных разрешений.istio-initЭтот контейнер инициализации делает это (запуск скрипта для записи iptables), вам нужно использоватьNET_ADMINвозможности. Учащиеся, не знакомые с возможностями Linux, могут обратиться к моемуСерия возможностей Linux.

Основная цель разработки подключаемого модуля Istio CNI — устранить этот привилегированный контейнер инициализации и заменить его альтернативой, использующей механизм Kubernetes CNI для достижения той же функциональности. Конкретный принцип заключается в том, чтобы добавить логику обработки Istio в конец цепочки подключаемых модулей Kubernetes CNI и настроить сетевую конфигурацию для модуля istio в точках создания и уничтожения модуля: напишите iptables для пересылки сетевого трафика. пространства имен сети, в котором находится модуль, в прокси-процесс.

Для получения подробной информации см.официальная документация.

Использование подключаемого модуля Istio CNI для создания правил sidecar iptables — это, безусловно, путь в будущем, поэтому давайте попробуем его прямо сейчас.

Важные дополнительные модули для Kubernetes

Как мы все знаем, все основные компоненты Kubernetes работают на главном узле, однако есть некоторые дополнительные компоненты, которые также важны для всего кластера, такие как DNS и сервер метрик, они называютсяключевой плагин. Как только ключевые подключаемые модули перестают работать должным образом, весь кластер может работать неправильно, поэтому Kubernetes использует PriorityClass для обеспечения нормального планирования и работы ключевых подключаемых модулей. Сделать приложение в Kubernetesключевой плагин, нужен только егоpriorityClassNameустановить какsystem-cluster-criticalилиsystem-node-criticalsystem-node-criticalнаивысший приоритет.

Примечание. Критические плагины можно запускать только наkube-systemв пространстве имен!

Для получения подробной информации см.официальная документация.

Далее официально устанавливаем istio, команда следующая:

$ istioctl manifest apply --set profile=demo \
   --set cni.enabled=true --set cni.components.cni.namespace=kube-system \
   --set values.gateways.istio-ingressgateway.type=ClusterIP

istioctl поддерживает два API:

В приведенной выше команде установки параметр cni использует IstioControlPlane API, аvalues.*Используется Helm API.

После завершения развертывания проверьте состояние каждого компонента:

$ kubectl -n istio-system get pod

NAME                                      READY   STATUS    RESTARTS   AGE
grafana-6b65874977-8psph                  1/1     Running   0          36s
istio-citadel-86dcf4c6b-nklp5             1/1     Running   0          37s
istio-egressgateway-68f754ccdd-m87m8      0/1     Running   0          37s
istio-galley-5fc6d6c45b-znwl9             1/1     Running   0          38s
istio-ingressgateway-6d759478d8-g5zz2     0/1     Running   0          37s
istio-pilot-5c4995d687-vf9c6              0/1     Running   0          37s
istio-policy-57b99968f-ssq28              1/1     Running   1          37s
istio-sidecar-injector-746f7c7bbb-qwc8l   1/1     Running   0          37s
istio-telemetry-854d8556d5-6znwb          1/1     Running   1          36s
istio-tracing-c66d67cd9-gjnkl             1/1     Running   0          38s
kiali-8559969566-jrdpn                    1/1     Running   0          36s
prometheus-66c5887c86-vtbwb               1/1     Running   0          39s
$ kubectl -n kube-system get pod -l k8s-app=istio-cni-node

NAME                   READY   STATUS    RESTARTS   AGE
istio-cni-node-k8zfb   1/1     Running   0          10m
istio-cni-node-kpwpc   1/1     Running   0          10m
istio-cni-node-nvblg   1/1     Running   0          10m
istio-cni-node-vk6jd   1/1     Running   0          10m

Вы можете видеть, что плагин cni был успешно установлен, проверьте, добавлена ​​ли конфигурация в конец цепочки плагинов CNI:

$ cat /etc/cni/net.d/10-calico.conflist

{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "plugins": [
  ...
    {
      "type": "istio-cni",
      "log_level": "info",
      "kubernetes": {
        "kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig",
        "cni_bin_dir": "/opt/cni/bin",
        "exclude_namespaces": [
          "istio-system"
        ]
      }
    }
  ]
}

По умолчанию кромеistio-systemВне пространства имен плагин istio cni будет отслеживать поды во всех других пространствах имен, но это не соответствует нашим потребностям.Более строгий подход — позволить плагину istio CNI хотя бы игнорироватьkube-system,istio-systemКак сделать эти два пространства имен?

Это также очень просто, помните упомянутый ранее API IstioControlPlane? Вы можете напрямую использовать его, чтобы перезаписать предыдущую конфигурацию, просто создайтеIstioControlPlaneCRD в порядке. Например:

$ cat cni.yaml

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
  cni:
    enabled: true
    components:
      namespace: kube-system
  values:
    cni:
      excludeNamespaces:
       - istio-system
       - kube-system
       - monitoring
  unvalidatedValues:
    cni:
      logLevel: info
$ istioctl manifest apply -f cni.yaml

Удалите все модули istio-cni-node:

$ kubectl -n kube-system delete pod -l k8s-app=istio-cni-node

Еще раз проверьте конфигурацию цепочки плагинов CNI:

$ cat /etc/cni/net.d/10-calico.conflist

{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "plugins": [
  ...
    {
      "type": "istio-cni",
      "log_level": "info",
      "kubernetes": {
        "kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig",
        "cni_bin_dir": "/opt/cni/bin",
        "exclude_namespaces": [
          "istio-system",
          "kube-system",
          "monitoring"
        ]
      }
    }
  ]
}

4. Откройте панель инструментов

По этому поводу сказать нечего, просто выставляйте через Ingress Controller, можете сослаться на то, что я писал ранееРазвертывание Istio 1.0. Если вы используете Contour, вы можете обратиться к другой моей статье:Примечания к исследованию Contour (1): используйте Contour, чтобы взять на себя трафик Kubernetes с севера на юг..

Здесь я представляю новый способ,istioctlПредусмотрена подкоманда для локального открытия различных информационных панелей:

$ istioctl dashboard --help

Access to Istio web UIs

Usage:
  istioctl dashboard [flags]
  istioctl dashboard [command]

Aliases:
  dashboard, dash, d

Available Commands:
  controlz    Open ControlZ web UI
  envoy       Open Envoy admin web UI
  grafana     Open Grafana web UI
  jaeger      Open Jaeger web UI
  kiali       Open Kiali web UI
  prometheus  Open Prometheus web UI
  zipkin      Open Zipkin web UI

Например, чтобы открыть страницу Grafana локально, просто выполните следующую команду:

$ istioctl dashboard grafana
http://localhost:36813

На первый взгляд эта функция может показаться мне очень безвкусной, мой кластер не развернут локально, и эта команда не может указать IP прослушивания, поэтому я не могу открыть его локально браузером! Фактически, вы можете установить двоичные файлы kubectl и istioctl локально, затем подключиться к кластеру через kubeconfig и, наконец, локально выполнить указанную выше команду, чтобы открыть страницу.Удобно ли разработчикам тестировать? Пользователи Windows, когда я не говорил. . .

5. Откройте шлюз

Чтобы раскрыть Ingress Gateway, мы можем использоватьHostNetworkрежим, но вы обнаружите, что модуль ingressgateway не может быть запущен, потому что, если модуль установленHostNetwork=true, то dnsPolicy начнется сClusterFirstпринуждают кDefault. Входной шлюз должен быть подключен через доменное имя DNS во время процесса запуска.pilotи другие компоненты, поэтому он не может быть запущен.

Мы можем заставитьdnsPolicyЗначение установлено наClusterFirstWithHostNetЧтобы решить эту проблему, обратитесь к:Расширенное руководство по Kubernetes DNS.

Измененный файл конфигурации развертывания ingressgateway выглядит следующим образом:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: istio-ingressgateway
  namespace: istio-system
  ...
spec:
  ...
  template:
    metadata:
    ...
    spec:
      affinity:
        nodeAffinity:
          ...
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - 192.168.0.4   # 假设你想调度到这台主机上
      ...
      dnsPolicy: ClusterFirstWithHostNet
      hostNetwork: true
      restartPolicy: Always
      ...

Затем мы можем получить доступ к сервисам в сервисной сетке через URL-адрес шлюза в браузере. Я начну серию экспериментальных уроков позже. Все шаги в этой статье являются подготовкой к более позднему. Если вы хотите следовать за мной, чтобы провести следующие эксперименты, обязательно выполните подготовку, описанную в этой статье.

Публичный аккаунт WeChat

Отсканируйте QR-код ниже, чтобы подписаться на официальную учетную запись WeChat, и ответьте на официальную учетную запись ◉Добавить группу◉, чтобы присоединиться к нашей облачной коммуникационной группе и обсудить облачные технологии с Сунь Хунляном, директором Чжаном, Ян Мином и другими важными шишками.