이 문서에서는 AKS 클러스터에서 고급 컨테이너 네트워킹 서비스를 사용하여 L7 정책을 설정하는 방법을 보여 줍니다. 계층 7 정책 개요 페이지에 나열된 제한 사항 및 고려 사항을 검토한 후에만 계속합니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 계정이 없으면 시작하기 전에 무료 계정을 만드세요.
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행하는 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
이 문서의 단계에 필요한 Azure CLI의 최소 버전은 2.71.0입니다.
az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
aks-preview
Azure CLI 확장 설치
az extension add
또는 az extension update
명령을 사용하여 Azure CLI 미리 보기 확장을 설치하거나 업데이트합니다.
aks-preview Azure CLI 확장의 최소 버전은 다음과 같습니다. 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
표시되면 az provider register
명령을 사용하여 리소스 공급자의 Microsoft.ContainerService
등록을 갱신합니다.
고급 컨테이너 네트워킹 서비스 사용
계속하려면 고급 컨테이너 네트워킹 서비스를 사용하도록 설정된 AKS 클러스터 가 있어야 합니다.
az aks create
고급 컨테이너 네트워킹 서비스 플래그--enable-acns
가 있는 명령은 모든 고급 컨테이너 네트워킹 서비스 기능을 사용하여 새 AKS 클러스터를 만듭니다. 이러한 기능은 다음을 포함합니다.
컨테이너 네트워크 관찰 가능성: 네트워크 트래픽에 대한 인사이트를 제공합니다. 자세한 내용은 Container Network Observability를 방문 하세요.
컨테이너 네트워크 보안: FQDN(정규화된 도메인 이름) 필터링과 같은 보안 기능을 제공합니다. 자세한 내용은 Container Network Security를 방문하세요.
비고
Cilium 데이터 평면을 사용하는 클러스터는 Kubernetes 버전 1.29부터 Container Network Observability 및 Container Network 보안을 지원합니다.
이 데모에서는 매개 변수를 --acns-advanced-networkpolicies
"L7"로 설정하여 L7 정책을 사용하도록 설정해야 합니다. 이 매개 변수를 "L7"로 설정하면 FQDN 필터링도 가능합니다. FQDN 필터링만 사용하려면 매개 변수를 "FQDN"으로 설정합니다. 두 기능을 모두 사용하지 않도록 설정하려면 Container Network Security 사용 안 함에서 제공하는 지침을 따를 수 있습니다.
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 데이터 평면이 있는 클러스터만 고급 컨테이너 네트워킹 서비스의 Container Network Security 기능을 지원합니다.
이 데모에서는 매개 변수를 --acns-advanced-networkpolicies
"L7"로 설정하여 L7 정책을 사용하도록 설정해야 합니다. 이 매개 변수를 "L7"로 설정하면 FQDN 필터링도 가능합니다. FQDN 필터링만 사용하려면 매개 변수를 "FQDN"으로 설정합니다. 두 기능을 모두 사용하지 않도록 설정하려면 Container Network Security 사용 안 함에서 제공하는 지침을 따를 수 있습니다.
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
AKS 클러스터에서 http-server 애플리케이션 설정
아래 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";
}
}
AKS 클러스터에서 http-client 애플리케이션 설정
아래 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"]
정책을 사용하여 연결 테스트
다음으로, GET
의 요청만 http-client
애플리케이션에서 /products
엔드포인트로 http-server
에서 허용하기 위해 다음 계층 7 정책을 적용합니다.
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 메트릭 모니터링
고급 컨테이너 네트워크 서비스의 컨테이너 네트워크 관찰 기능을 사용하도록 설정한 경우 Grafana에서 트래픽을 시각화할 수 있습니다.
이러한 L7 메트릭의 분석을 간소화하기 위해 미리 구성된 Azure Managed Grafana 대시보드를 제공합니다. > 워크로드)"과 같은 파일 이름을 사용하여 대시보드 Azure Managed Prometheus 폴더에서 찾을 수 있습니다.
다음과 비슷한 메트릭이 표시됩니다.
자원을 정리하세요
이 애플리케이션을 사용할 플랜이 없는 경우 az group delete
명령을 사용하여 이 문서에서 만든 다른 리소스를 삭제합니다.
az group delete --name $RESOURCE_GROUP
다음 단계
이 방법 문서에서는 AKS 클러스터에 대해 고급 컨테이너 네트워킹 서비스를 사용하여 L7 정책을 사용하도록 설정하고 적용하는 방법을 알아보았습니다.
- AKS(Azure Kubernetes Service)용 고급 컨테이너 네트워킹 서비스에 대한 자세한 내용은 AKS(Azure Kubernetes Service)용 고급 컨테이너 네트워킹 서비스란?을 참조하세요.
Azure Kubernetes Service