Настройка функции фильтрации полного доменного имени для безопасности сети контейнеров в расширенных сетевых службах контейнеров
В этой статье показано, как настроить расширенные сетевые службы контейнеров с помощью функции безопасности сети контейнеров в кластерах 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.
- Дополнительные сведения о расширенных сетевых службах контейнеров для Служба Azure Kubernetes (AKS) см. в статье "Дополнительные сетевые службы контейнеров" для Служба Azure Kubernetes (AKS)?.
Azure Kubernetes Service