• Русский
  • Установка mesh в режиме dual-stack

    Установите Istio с поддержкой сетей dual-stack, чтобы обеспечить подключение как по IPv4, так и по IPv6 внутри вашего сервис-меша.

    Требования

    • Kubernetes настроен с поддержкой dual-stack.
    • Плагин Alauda Container Platform Networking для Multus должен быть установлен, а kube-ovn — версии v4.1.5 или выше.
    • В вашем кластере установлен оператор Alauda Service Mesh v2.

    Процедура

    Установка IstioCNI

    Установите ресурс IstioCNI, выполнив следующую команду:

    kubectl create namespace istio-cni
    cat <<EOF | kubectl apply -f -
    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # /etc/cni/net.d в ACP 4.0
          excludeNamespaces:
            - istio-cni
            - kube-system
    EOF

    Установка Istio с конфигурацией dual-stack

    1. Создайте ресурс Istio с конфигурацией dual-stack, выполнив следующую команду:

      kubectl create namespace istio-system
      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: Istio
      metadata:
        name: default
      spec:
        namespace: istio-system
        values:
          meshConfig:
            defaultConfig:
              proxyMetadata:
                ISTIO_DUAL_STACK: "true"
          pilot:
            ipFamilyPolicy: RequireDualStack
            env:
              ISTIO_DUAL_STACK: "true"
      EOF
    2. Дождитесь, пока контрольная плоскость не вернёт состояние Ready, выполнив команду:

      kubectl wait --for condition=Ready istio/default --timeout=3m

    Проверка работы mesh в режиме dual-stack

    Чтобы убедиться, что ваш mesh в режиме dual-stack работает корректно, разверните пример приложений с разными конфигурациями IP-семейств. Цель — проверить, что mesh может обрабатывать сервисы с IPv4, IPv6 и dual-stack.

    Процедура

    Создание пространств имён для примерных приложений

    Создайте следующие пространства имён, каждое из которых будет содержать сервис tcp-echo с определённой IP-конфигурацией:

    • dual-stack: содержит сервис tcp-echo, слушающий как IPv4, так и IPv6 адреса.

    • ipv4: содержит сервис tcp-echo, слушающий только IPv4 адреса.

    • ipv6: содержит сервис tcp-echo, слушающий только IPv6 адреса.

    • sleep: содержит клиентское приложение для отправки тестовых запросов.

      kubectl create namespace dual-stack
      kubectl create namespace ipv4
      kubectl create namespace ipv6
      kubectl create namespace sleep

    Включение автоматической инъекции sidecar для пространств имён

    Пометьте пространства имён, чтобы включить автоматическую инъекцию sidecar Istio, выполнив следующую команду:

    kubectl label namespace dual-stack istio-injection=enabled
    kubectl label namespace ipv4 istio-injection=enabled
    kubectl label namespace ipv6 istio-injection=enabled
    kubectl label namespace sleep istio-injection=enabled

    Развёртывание примерных приложений

    1. Разверните приложение tcp-echo с конфигурацией dual-stack:

      kubectl apply -n dual-stack -f https://raw.githubusercontent.com/alauda-mesh/istio/istio-1.28/samples/tcp-echo/tcp-echo-dual-stack.yaml
    2. Разверните приложение tcp-echo с конфигурацией только IPv4:

      kubectl apply -n ipv4 -f https://raw.githubusercontent.com/alauda-mesh/istio/istio-1.28/samples/tcp-echo/tcp-echo-ipv4.yaml
    3. Разверните приложение tcp-echo с конфигурацией только IPv6:

      kubectl apply -n ipv6 -f https://raw.githubusercontent.com/alauda-mesh/istio/istio-1.28/samples/tcp-echo/tcp-echo-ipv6.yaml
    4. Разверните приложение sleep, которое будет выступать клиентом для отправки тестовых запросов:

      kubectl apply -n sleep -f https://raw.githubusercontent.com/alauda-mesh/istio/istio-1.28/samples/sleep/sleep.yaml
    5. Дождитесь, пока все развёртывания станут доступными:

      kubectl wait --for=condition=Ready pod -n dual-stack -l app=tcp-echo --timeout=3m
      kubectl wait --for=condition=Ready pod -n ipv4 -l app=tcp-echo --timeout=3m
      kubectl wait --for=condition=Ready pod -n ipv6 -l app=tcp-echo --timeout=3m
      kubectl wait --for=condition=Ready pod -n sleep -l app=sleep --timeout=3m

    Проверка конфигурации сервиса dual-stack

    Убедитесь, что сервис tcp-echo в пространстве имён dual-stack настроен с ipFamilyPolicy равным RequireDualStack, выполнив команду:

    kubectl get service tcp-echo -n dual-stack -o=jsonpath='{.spec.ipFamilyPolicy}'

    Пример вывода

    RequireDualStack

    Проверка подключения к сервисам dual-stack

    Отправьте тестовый запрос из пода sleep к сервису tcp-echo в пространстве имён dual-stack:

    kubectl exec -n sleep deploy/sleep -- sh -c "echo dualstack | nc tcp-echo.dual-stack 9000"

    Пример вывода

    hello dualstack

    Проверка подключения к сервисам IPv4 и IPv6

    1. Отправьте тестовый запрос к сервису tcp-echo с конфигурацией только IPv4:

      kubectl exec -n sleep deploy/sleep -- sh -c "echo ipv4 | nc tcp-echo.ipv4 9000"

      Пример вывода

      hello ipv4
    2. Отправьте тестовый запрос к сервису tcp-echo с конфигурацией только IPv6:

      kubectl exec -n sleep deploy/sleep -- sh -c "echo ipv6 | nc tcp-echo.ipv6 9000"

      Пример вывода

      hello ipv6

    Удаление mesh в режиме dual-stack из среды разработки

    После завершения проверки и экспериментов рекомендуется удалить конфигурацию dual-stack для очистки среды разработки и освобождения ресурсов.

    Процедура

    Выполните следующие команды для удаления всех компонентов Istio и примерных приложений:

    kubectl delete istio/default istiocni/default
    kubectl delete ns/dual-stack ns/ipv4 ns/ipv6 ns/sleep
    kubectl delete ns/istio-system ns/istio-cni