다음을 통해 공유


고급 컨테이너 네트워킹 서비스에서 Container Network Security에 대한 FQDN 필터링 기능 설정

이 문서에서는 AKS 클러스터에서 Container Network Security 기능을 사용하여 고급 컨테이너 네트워킹 서비스를 설정하는 방법을 보여 줍니다.

필수 조건

이 문서의 단계에 필요한 Azure CLI의 최소 버전은 2.56.0입니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

aks-preview Azure CLI 확장 설치

az extension add 또는 az extension update 명령을 사용하여 Azure CLI 미리 보기 확장을 설치하거나 업데이트합니다.

# 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 클러스터를 만듭니다. 이러한 기능은 다음을 포함합니다.

  • 컨테이너 네트워크 관찰 가능성: 네트워크 트래픽에 대한 인사이트를 제공합니다. 자세한 내용은 Container Network Observability를 방문 하세요.

  • 컨테이너 네트워크 보안: FQDN 필터링과 같은 보안 기능을 제공합니다. 자세한 내용은 Container Network Security를 방문하세요.

참고 항목

Cilium 데이터 평면을 사용하는 클러스터는 Kubernetes 버전 1.29부터 Container Network Observability 및 Container Network 보안을 지원합니다.

# 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 데이터 평면이 있는 클러스터만 고급 컨테이너 네트워킹 서비스의 Container Network Security 기능을 지원합니다.

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 에이전트를 통해 적용되는 정책을 관찰하는 방법을 보여 줍니다. 허용된 FQDN 및 차단된 다른 사례에 대한 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 만들기

Bash를 client 실행하는 Pod를 만듭니다.

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

FQDN 테스트를 위한 유틸리티가 있는 셸은 다음 출력과 함께 열립니다.

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 에이전트 검사

CLI를 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

정책 확인

첫 번째 셸에서 정책에 지정된 대로 허용된 FQDN *.bing.com에 대한 요청을 만듭니다. 이 작업은 성공하고 에이전트에서 허용해야 합니다.

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

그런 다음, 차단될 것으로 예상되는 FQDN에 대한 다른 요청을 만듭니다.

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 클러스터에 대한 고급 컨테이너 네트워킹 서비스를 사용하여 보안 기능을 설치하고 사용하도록 설정하는 방법을 알아보았습니다.