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


Настройка функции фильтрации полного доменного имени для безопасности сети контейнеров в расширенных сетевых службах контейнеров

В этой статье показано, как настроить расширенные сетевые службы контейнеров с помощью функции безопасности сети контейнеров в кластерах AKS.

Необходимые компоненты

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

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

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

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

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

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

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

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

# 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

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

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

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

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

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

Примечание.

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

# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --location eastus \
    --max-pods 250 \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --node-count 2 \
    --pod-cidr 192.168.0.0/16 \
    --kubernetes-version 1.29 \
    --enable-acns

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

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

Примечание.

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

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

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

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

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

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

В этом разделе показано, как наблюдать за политикой, применяемой с помощью агента Cilium. Dns-запрос выполняется в разрешенное полное доменное имя, а другой случай, когда он заблокирован.

Создайте файл demo-policy.yaml и вставьте в него следующий манифест YAML:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "allow-bing-fqdn"
spec:
  endpointSelector:
    matchLabels:
      app: demo-container
  egress:
    - toEndpoints:
      - matchLabels:
          "k8s:io.kubernetes.pod.namespace": kube-system
          "k8s:k8s-app": kube-dns
      toPorts:
        - ports:
           - port: "53"
             protocol: ANY
          rules:
            dns:
              - matchPattern: "*.bing.com"
    - toFQDNs:
      - matchPattern: "*.bing.com"

Укажите имя манифеста YAML и примените его с помощью [kubectl apply][kubectl-apply]:

kubectl apply –f demo-policy.yaml -n demo

Создание демонстрационного модуля pod

client Создайте модуль pod под управлением Bash:

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.43 --labels="app=demo-container" --command -- bash

Оболочка с служебными программами для тестирования полного доменного имени должна открыться со следующими выходными данными:

If you don't see a command prompt, try pressing enter.
bash-5.0#

В отдельном окне выполните следующую команду, чтобы получить узел запущенного модуля pod.

kubectl get po -n demo --sort-by="{spec.nodeName}" -o wide

Результат должен выглядеть следующим образом:

NAME     READY   STATUS    RESTARTS   AGE     IP              NODE                                NOMINATED NODE   READINESS GATES
client   1/1     Running   0          5m50s   192.168.0.139   aks-nodepool1-22058664-vmss000001   <none>           <none>

Модуль pod выполняется на узле с именем aks-nodepool1-22058664-vmss000001. Получите экземпляр агента Cilium, запущенный на этом узле:

k get po -n kube-system -o wide --field-selector spec.nodeName="aks-nodepool1-22058664-vmss000001" | grep "cilium"

Ожидаемое cilium-s4x24 значение должно находиться в выходных данных.

cilium-s4x24                          1/1     Running   0          47m   10.224.0.4      aks-nodepool1-22058664-vmss000001   <none>           <none>

Проверка агента Cilium

Используйте ИНТЕРФЕЙС командной cilium строки для мониторинга блокировки трафика.

kubectl exec -it -n kube-system cilium-s4x24 -- sh
Defaulted container "cilium-agent" out of: cilium-agent, install-cni-binaries (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), block-wireserver (init)
#

В этой оболочке выполните следующую команду cilium monitor -t drop:

Listening for events on 2 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
time="2024-10-08T17:48:27Z" level=info msg="Initializing dissection cache..." subsys=monitor

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

В первой оболочке создайте запрос на разрешенное полное доменное имя, *.bing.comкак указано в политике. Это должно быть успешно и разрешено агентом.

bash-5.0# ./agnhost connect www.bing.com:80

Затем создайте другой запрос к полное доменное имя, как ожидается, будет заблокировано:

bash-5.0# ./agnhost connect www.example.com:80

Агент Cilium заблокировал запрос с выходными данными:

xx drop (Policy denied) flow 0xfddd76f6 to endpoint 0, ifindex 29, file bpf_lxc.c:1274, , identity 48447->world: 192.168.0.149:45830 -> 93.184.215.14:80 tcp SYN

Очистка ресурсов

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

  az group delete --name $RESOURCE_GROUP

Следующие шаги

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