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


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

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

Предпосылки

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

Установка расширения Azure CLI aks-preview

Установите или обновите расширение предварительной версии Azure CLI с помощью az extension add команды или az extension update команды.

Минимально допустимая версия расширения Azure CLI для aks-preview 14.0.0b6

# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Регистрация флага компонента AdvancedNetworkingL7PolicyPreview

Зарегистрируйте флаг функции AdvancedNetworkingL7PolicyPreview с помощью команды az feature register.

az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"

Проверьте успешную регистрацию, используя команду az feature show. Регистрация занимает несколько минут.

az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"

После того как Registered функция будет показана, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register.

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

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

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

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

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

Замечание

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

Для этой демонстрации параметр --acns-advanced-networkpolicies должен иметь значение "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

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

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

Замечание

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

Для этой демонстрации параметр --acns-advanced-networkpolicies должен иметь значение "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 команды.

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

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

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

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, чтобы настроить приложение http-client.

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, чтобы разрешить только GET запросы от приложения http-client к конечной точке /products на http-server.

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 http-client:.

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

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

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

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

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

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

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

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

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

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

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

  az group delete --name $RESOURCE_GROUP

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

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