Поделиться через


Настройка политик уровня 7 (L7) с помощью расширенных сетевых служб контейнеров

В этой статье показано, как настроить политики L7 с помощью расширенных сетевых служб контейнеров в кластерах AKS. Продолжайте только после проверки ограничений и рекомендаций, перечисленных на странице обзора политики уровня 7 .

Предпосылки

  • Учетная запись #REF! с активной подпиской. Если у вас еще нет аккаунта, создайте бесплатную учетную запись, прежде чем начать.
  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Начало работы с Azure Cloud Shell.

  • Если вы предпочитаете локально запускать справочные команды CLI, установите Azure CLI. Если вы работаете на #REF! или macOS, попробуйте запустить Azure CLI в контейнере Docker. Дополнительные сведения см. в разделе Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login. Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Другие параметры входа см. в разделе Аутентификация в #REF! с использованием Azure CLI.

    • При появлении запроса установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в разделе Использование расширений и управление ими с помощью Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Минимальная версия Azure CLI, необходимая для действий, описанных в этой статье, — 2.79.0. Чтобы узнать версию, выполните команду . Если необходимо установить или обновить, см. раздел Install Azure CLI.

Включить расширенные сетевые службы для контейнеров

Для продолжения необходимо иметь кластер AKS с включенной функцией расширенных сетевых служб контейнеров.

Команда с флагом расширенных сетевых служб контейнеров создает новый кластер AKS со всеми функциями расширенных сетевых служб контейнеров. Эти функции охватывают следующие возможности:

  • Наблюдение за сетью контейнеров. Предоставляет аналитические сведения о сетевом трафике. Дополнительные сведения см. в разделе "Наблюдаемость сети контейнеров".

  • Безопасность сети контейнеров: Предоставляет функции безопасности, такие как фильтрация полного доменного имени (FQDN). Дополнительные сведения см. в статье "Безопасность сети контейнеров".

  • Цилий
  • Non-Cilium

Замечание

Кластеры с плоскостью данных Cilium поддерживают наблюдаемость сети контейнеров и безопасность сети контейнеров, начиная с версии Kubernetes 1.29.

Для этой демонстрации параметр должен иметь значение "L7", чтобы включить политики L7. При задании этого параметра значение "L7" также включается фильтрация FQDN. Если требуется только включить фильтрацию FQDN, задайте для параметра "FQDN". Чтобы отключить обе функции, можно выполнить инструкции, приведенные в разделе "Отключить безопасность сети контейнеров".


export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --network-plugin azure \
    --network-dataplane cilium \
    --enable-acns \
    --acns-advanced-networkpolicies L7

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

Команда с флагом "Расширенные сетевые службы контейнеров" обновляет существующий кластер AKS со всеми функциями расширенных сетевых служб контейнеров, которые включают в себя наблюдение за сетями контейнеров и функцию безопасности сети контейнеров.

Замечание

Только кластеры с плоскостью данных Cilium поддерживают функции сетевой безопасности контейнеров в рамках расширенных сетевых служб контейнеров.

Для этой демонстрации параметр должен иметь значение "L7", чтобы включить политики L7. При задании этого параметра значение "L7" также включается фильтрация FQDN. Если требуется только включить фильтрацию FQDN, задайте для параметра "FQDN". Чтобы отключить обе функции, можно выполнить инструкции, приведенные в разделе "Отключить безопасность сети контейнеров".

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-advanced-networkpolicies L7

Получение учетных данных кластера

Получите учетные данные кластера с помощью команды.

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Настройка приложения http-server в кластере AKS

Примените приведенный ниже YAML к кластеру AKS, чтобы настроить приложение .

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-server
  labels:
    app: http-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-server
  template:
    metadata:
      labels:
        app: http-server
    spec:
      containers:
      - name: http-server
        image: nginx:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: config-volume
        configMap:
          name: nginx-config

---
apiVersion: v1
kind: Service
metadata:
  name: http-server
spec:
  selector:
    app: http-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  default.conf: |
    server {
        listen 8080;

        location / {
            return 200 "Hello from the server root!\n";
        }

        location /products {
            return 200 "Listing products...\n";
        }
    }

Настройка приложения http-client в кластере AKS

Примените приведенный ниже YAML к кластеру AKS, чтобы настроить приложение .

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-client
  labels:
    app: http-client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-client
  template:
    metadata:
      labels:
        app: http-client
    spec:
      containers:
      - name: http-client
        image: curlimages/curl:latest
        command: ["sleep", "infinity"]

Проверить подключение с помощью политики

Затем примените следующую политику уровня 7, чтобы разрешить только запросы от приложения к конечной точке на .

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-get-products
spec:
  description: "Allow only GET requests to /products from http-client to http-server"
  endpointSelector:
    matchLabels:
      app: http-server
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: http-client
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/products"

Проверка политики

Чтобы проверить выполнение политики, выполните следующие команды из контейнера pod :.

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v http://http-server:80/products

Вы должны ожидать выходные данные, такие как при выполнении приведенной выше команды.

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v -XPOST http://http-server:80/products -d "test=data"

Вы должны ожидать выходные данные, такие как при выполнении приведенной выше команды.

Наблюдение за метриками L7

Если у вас включена функция наблюдаемости сети контейнеров службы Advanced Container Network Service, вы можете визуализировать трафик в Grafana.

Чтобы упростить анализ этих метрик L7, мы предоставляем предварительно настроенные Управление Azure для Grafana панели мониторинга. Их можно найти в папке Dashboards > #REF! Managed Prometheus, с такими именами файлов, как "Kubernetes/Networking/L7 (пространство имен)" и "Kubernetes/Networking/L7 (Рабочая нагрузка)".

Метрики должны иметь следующий вид:

Снимок экрана: панель мониторинга Grafana для трафика L7.

Очистите ресурсы

Если вы не планируете использовать это приложение, удалите другие ресурсы, созданные в этой статье, с помощью команды.

  az group delete --name $RESOURCE_GROUP

Дальнейшие шаги

В этой пошаговой инструкции вы узнали, как активировать и применять политики уровня L7 с расширенными сетевыми службами для контейнеров вашего кластера AKS.