고급 컨테이너 네트워킹 서비스에서 Container Network Security에 대한 FQDN 필터링 기능 설정
이 문서에서는 AKS 클러스터에서 Container Network Security 기능을 사용하여 고급 컨테이너 네트워킹 서비스를 설정하는 방법을 보여 줍니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 구독이 없으면 시작하기 전에 계정을 만드세요.
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
이 문서의 단계에 필요한 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 클러스터에 대한 고급 컨테이너 네트워킹 서비스를 사용하여 보안 기능을 설치하고 사용하도록 설정하는 방법을 알아보았습니다.
- AKS(Azure Kubernetes Service)용 고급 컨테이너 네트워킹 서비스에 대한 자세한 내용은 AKS(Azure Kubernetes Service)용 고급 컨테이너 네트워킹 서비스란?을 참조하세요.
Azure Kubernetes Service