AKS 클러스터에 flex 노드 연결(미리 보기)

Important

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

AKS(Azure Kubernetes Service) 클러스터, 네트워킹, 플렉스 노드 풀, 호스트 및 ID를 준비한 후 호스트를 부트스트랩하고 대상 풀에 연결합니다.

이 글에서 당신은 다음을 하게 됩니다.

  • flex 노드 배포본을 다운로드하고 검증하세요.
  • 선택한 Azure ID를 사용하여 호스트를 부트스트랩하여 새 풀 데이터를 검색합니다.
  • Kubernetes 노드, Azure 컴퓨터, 네트워킹 상태 및 에이전트 서비스를 확인합니다.
  • 워크로드 배치, Kubernetes 콜백 및 노드 간 연결의 유효성을 검사합니다.

필요한 도구와 네트워크 액세스 권한이 있는 Linux 호환 Bash 환경에서 이 문서의 관리 명령을 실행합니다. 이 문서에서는 그 환경을 Bash 환경이라고 부릅니다. 클러스터를 조인하는 별도의 컴퓨터는 flex 노드 호스트입니다. 단계가 명시적으로 지시하는 경우에만 명령을 실행합니다.

프라이빗 AKS 클러스터의 경우 프라이빗 API 서버를 확인하고 연결할 수 있는 Bash 환경에서 모든 kubectl 명령을 실행합니다. 필요한 Azure 및 호스트 액세스 권한이 있는 경우 Bash 환경에서 Azure CLI, 아티팩트 다운로드, SSH 및 SCP 명령을 실행할 수 있습니다. flex 노드 호스트 네트워크도 프라이빗 API 엔드포인트를 확인하고 연결해야 합니다.

시작하기 전 주의 사항:

  • 네트워킹 구성을 완료하고 AKS에서 flex 노드 풀을 만듭니다.
  • Flex 노드 호스트 및 ID를 완료합니다.
  • Bash 환경에서 Azure CLI, aks-preview 확장, AKS_VERSION에서 부 버전 하나 이내인 kubectl 버전, curl, jq, sha256sum, OpenSSH 클라이언트 및 scp를 설치하세요.
  • 관리 ID 또는 서비스 주체의 경우 선택한 flex 노드 풀에 대한 부트스트랩 데이터를 검색할 수 있는 Azure 계정을 사용합니다.
  • Bash 환경이 승인된 SSH 관리 경로를 통해 flex 노드 호스트에 연결할 수 있는지 확인합니다.
  • flex 노드 호스트가 HTTPS를 통해 풀 부트스트랩 데이터, Azure Resource Manager, Microsoft Entra ID 및 선택한 AKS API 엔드포인트에서 반환된 릴리스 및 부트스트랩 아티팩트 엔드포인트에 도달할 수 있는지 확인합니다.

메모

공유 환경 파일에 자격 증명, 인증서, 프라이빗 키, 액세스 토큰, 부트스트랩 데이터 또는 kubeconfig 콘텐츠를 저장하지 마세요.

배포 환경 로드

새 Bash 세션을 시작하고, 환경 파일을 식별하고, 로드합니다. <deployment-name>를 앞선 문서에서 사용한 배포 레이블로 바꾸세요.

export FLEXNODE_DEPLOYMENT="<deployment-name>"
export FLEXNODE_ENV_FILE="${HOME}/.config/aks-flexnode/${FLEXNODE_DEPLOYMENT}.env"
test -s "${FLEXNODE_ENV_FILE}"
source "${FLEXNODE_ENV_FILE}"
export KUBECONFIG="${FLEXNODE_KUBECONFIG}"
install -d -m 0700 "${WORK_DIR:?Load the deployment environment first.}"

환경 파일은 이 문서에서 사용하는 공유된 배포 값(이 문서에서 다운로드한 파일과 생성된 파일을 저장하는 Bash 환경의 디렉터리인 WORK_DIR 포함)을 제공합니다. 기본적으로 WORK_DIR는 ~/.local/share/aksflexnode/<deployment-name>입니다. 이 문서에서는 필요한 다른 변수를 파생합니다. 환경 파일을 아직 만들지 않은 경우 먼저 flex 노드 배포 계획을 완료합니다 . 셸에서 오류를 보고하는 경우 이 단계를 계속 진행하지 마세요.

활성 구독을 설정하고 Azure, Kubernetes 및 호스트 대상을 표시합니다.

az account set --subscription "${SUBSCRIPTION_ID}"

az aks show \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${CLUSTER_NAME}" \
    --query "{Cluster:name,ResourceId:id,ApiServer:(privateFqdn || fqdn)}" \
    --output table
kubectl cluster-info

printf 'Recorded flex host: %s\n' "${FLEX_HOST_NAME}"
ssh -i "${SSH_PRIVATE_KEY_PATH}" "${FLEX_HOST_SSH_TARGET}" hostname

ResourceId가 일치하는AKS_RESOURCE_ID지 확인하고, Kubernetes 컨트롤 플레인 호스트 이름이 ApiServer와 일치하고, SSH 명령이 반환됩니다FLEX_HOST_NAME. 대상이 일치하지 않는 경우 파일을 전송하거나 실행하기 전에 환경 파일, kubeconfig 또는 SSH 대상을 중지하고 수정합니다.

flex 노드 릴리스를 다운로드하고 확인하세요

  1. 호스트 아키텍처를 식별하고 일치하는 릴리스 보관 파일을 선택합니다.

    HOST_ARCH="$(ssh \
        -i "${SSH_PRIVATE_KEY_PATH}" \
        "${FLEX_HOST_SSH_TARGET}" \
        uname -m)"
    export HOST_ARCH
    
    case "${HOST_ARCH}" in
        x86_64) export AGENT_ARCH="amd64" ;;
        aarch64|arm64) export AGENT_ARCH="arm64" ;;
        *)
            printf 'Unsupported host architecture: %s\n' "${HOST_ARCH}" >&2
            false
            ;;
    esac
    
    export AGENT_ARCHIVE="aks-flex-node-linux-${AGENT_ARCH}.tar.gz"
    printf 'Selected release archive: %s\n' "${AGENT_ARCHIVE}"
    
  2. 선택한 릴리스에서 아카이브와 체크섬 매니페스트를 다운로드합니다.

    curl --fail --location --silent --show-error \
        --proto '=https' \
        --tlsv1.2 \
        "https://github.com/Azure/AKSFlexNode/releases/download/${AKS_FLEX_NODE_VERSION}/${AGENT_ARCHIVE}" \
        --output "${WORK_DIR}/${AGENT_ARCHIVE}"
    
    curl --fail --location --silent --show-error \
        --proto '=https' \
        --tlsv1.2 \
        "https://github.com/Azure/AKSFlexNode/releases/download/${AKS_FLEX_NODE_VERSION}/checksums.txt" \
        --output "${WORK_DIR}/checksums.txt"
    
  3. 압축 파일에 대한 체크섬 항목을 정확히 하나만 선택한 다음 파일을 검증합니다.

    AGENT_CHECKSUM_ENTRY="$(awk \
        -v file="${AGENT_ARCHIVE}" \
        '$2 == file {print}' \
        "${WORK_DIR}/checksums.txt")"
    export AGENT_CHECKSUM_ENTRY
    
    test "$(printf '%s\n' "${AGENT_CHECKSUM_ENTRY}" |
        sed '/^$/d' |
        wc -l)" -eq 1
    
    (
        cd "${WORK_DIR:?Load the deployment environment first.}"
        printf '%s\n' "${AGENT_CHECKSUM_ENTRY}" |
            sha256sum --check --strict -
    )
    
    export AGENT_SHA256="${AGENT_CHECKSUM_ENTRY%% *}"
    test -n "${AGENT_SHA256}"
    

    체크섬 명령이 아카이브가 OK라고 표시하지 않으면 계속하지 마세요.

  4. 동일한 릴리스 태그에서 부트스트랩 스크립트를 다운로드하고 Bash 구문의 유효성을 검사합니다.

    curl --fail --location --silent --show-error \
        --proto '=https' \
        --tlsv1.2 \
        "https://raw.githubusercontent.com/Azure/AKSFlexNode/${AKS_FLEX_NODE_VERSION}/scripts/bootstrap.sh" \
        --output "${WORK_DIR}/bootstrap.sh"
    
    chmod 0700 "${WORK_DIR}/bootstrap.sh"
    bash -n "${WORK_DIR}/bootstrap.sh"
    

    릴리스는 현재 이 스크립트에 대한 별도의 체크섬을 게시하지 않습니다. 셸에 파이핑하지 않고 다운로드하고, 확인된 에이전트 보관 파일과 버전 일치를 유지하고, 구문 검사에 실패하면 중지합니다.

현재 풀 부트스트랩 데이터 가져오기

관리 ID 및 서비스 주체 경로는 Bash 환경에서 검색하는 부트스트랩 데이터를 사용합니다. Azure Arc 관리 ID를 선택한 경우 이 섹션을 건너뜁니다. Arc 부트스트랩 명령은 Arc 컴퓨터 ID를 통해 새 데이터를 검색합니다.

관리 ID 또는 서비스 주체의 경우 파일을 호스트로 전송하기 직전에 데이터를 가져옵니다. 응답에는 1시간 후에 만료되는 부트스트랩 토큰이 포함됩니다. 응답을 인쇄하거나 노트에 저장하지 마세요.

az aks nodepool get-bootstrap-data \
    --resource-group "${RESOURCE_GROUP}" \
    --cluster-name "${CLUSTER_NAME}" \
    --name "${FLEX_POOL_NAME}" \
    --output json \
    > "${WORK_DIR}/base-config.json"

chmod 0600 "${WORK_DIR}/base-config.json"
test -s "${WORK_DIR}/base-config.json"

${WORK_DIR}/base-config.json가 존재하고 비어 있지 않으면 계속합니다. 1시간 이내에 전송 및 호스트 부트스트랩을 완료합니다. 토큰이 만료되면 명령을 다시 실행하고 이전 파일을 바꿉니다.

파일 전송 및 호스트 준비

  1. 비보안 호스트 핸드오프 파일을 만듭니다.

    {
        printf 'export AGENT_ARCHIVE=%q\n' "${AGENT_ARCHIVE}"
        printf 'export AGENT_SHA256=%q\n' "${AGENT_SHA256}"
        printf 'export AKS_FLEX_NODE_VERSION=%q\n' "${AKS_FLEX_NODE_VERSION}"
        printf 'export AKS_RESOURCE_ID=%q\n' "${AKS_RESOURCE_ID}"
        printf 'export FLEX_POOL_NAME=%q\n' "${FLEX_POOL_NAME}"
        printf 'export FLEX_HOST_PRIVATE_IP=%q\n' "${FLEX_HOST_PRIVATE_IP}"
        printf 'export HOST_IDENTITY_CLIENT_ID=%q\n' "${HOST_IDENTITY_CLIENT_ID:-}"
        printf 'export SP_TENANT_ID=%q\n' "${SP_TENANT_ID:-}"
        printf 'export SP_CLIENT_ID=%q\n' "${SP_CLIENT_ID:-}"
    } > "${WORK_DIR}/host-bootstrap.env"
    
    chmod 0600 "${WORK_DIR}/host-bootstrap.env"
    
  2. 확인된 릴리스 파일 및 핸드오프 파일을 호스트에 복사합니다.

    scp -i "${SSH_PRIVATE_KEY_PATH}" \
        "${WORK_DIR}/${AGENT_ARCHIVE}" \
        "${WORK_DIR}/bootstrap.sh" \
        "${WORK_DIR}/host-bootstrap.env" \
        "${FLEX_HOST_SSH_TARGET}:/tmp/"
    
  3. 관리 ID 또는 서비스 주체의 경우 보호된 부트스트랩 데이터도 복사합니다.

    scp -i "${SSH_PRIVATE_KEY_PATH}" \
        "${WORK_DIR}/base-config.json" \
        "${FLEX_HOST_SSH_TARGET}:/tmp/"
    
  4. 호스트에 연결하고 루트 셸을 시작합니다.

    ssh -i "${SSH_PRIVATE_KEY_PATH}" "${FLEX_HOST_SSH_TARGET}"
    sudo -i
    
  5. 비보안 핸드오프 값을 로드하고 전송된 파일의 유효성을 검사합니다.

    source /tmp/host-bootstrap.env
    chmod 0600 "/tmp/${AGENT_ARCHIVE}" /tmp/host-bootstrap.env
    chmod 0700 /tmp/bootstrap.sh
    bash -n /tmp/bootstrap.sh
    printf '%s  %s\n' \
        "${AGENT_SHA256}" \
        "/tmp/${AGENT_ARCHIVE}" |
        sha256sum --check --strict -
    

    체크섬 명령에서 아카이브가 OK라고 보고되면 계속 진행합니다. 체크섬 또는 스크립트 구문 검사가 실패하면 중지합니다.

  6. 관리 ID 또는 서비스 주체의 경우 부트스트랩 데이터를 설치합니다.

    install -d -o root -g root -m 0700 /etc/aks-flex-node
    install -o root -g root -m 0600 \
        /tmp/base-config.json \
        /etc/aks-flex-node/base-config.json
    test -s /etc/aks-flex-node/base-config.json
    

호스트를 부팅합니다

이전 문서에서 구성한 ID와 일치하는 섹션만 완료합니다.

Arc 컴퓨터 리소스가 SSH 호스트와 일치하고, 활성 상태이고, himdsd HIMDS 확인에서 정확한 AKS 리소스에 대해 HTTP 200을 반환하고, 이전 문서에서 확인한 대로 AKS 범위 역할 할당이 있는 경우에만 이 섹션을 사용합니다. 이 경로는 Arc 머신 ID를 통해 최신 부트스트랩 데이터를 가져오며, Bash 환경의 base-config.json 파일은 사용하지 않습니다.

CONFIG_OVERRIDES="$(jq -cn \
    --arg nodeIP "${FLEX_HOST_PRIVATE_IP}" \
    '{node:{kubelet:{nodeIP:$nodeIP}}}')"
export CONFIG_OVERRIDES

bash /tmp/bootstrap.sh \
    --auth arc \
    --fetch-bootstrap-data \
    --cluster-resource-id "${AKS_RESOURCE_ID}" \
    --agent-pool-name "${FLEX_POOL_NAME}" \
    --agent-url "file:///tmp/${AGENT_ARCHIVE}" \
    --agent-sha256 "${AGENT_SHA256}" \
    --config-overrides "${CONFIG_OVERRIDES}"

출력에 Arc preflight: OK이(가) 보고되고, 머신 등록이 완료되며, 부트스트랩 스크립트에서 flex 노드 에이전트 서비스가 시작되었다고 보고하면 계속 진행합니다. 부트스트랩에서 데이터를 검색할 수 없는 경우 Arc 연결, himdsdAKS 범위 역할 할당 및 Azure Resource Manager 대한 호스트 액세스를 확인합니다.

임시 릴리스 파일 제거

부트스트랩이 성공하면 호스트에서 임시 스크립트, 보관 및 핸드오프 파일을 제거합니다.

rm -f \
    "/tmp/${AGENT_ARCHIVE}" \
    /tmp/bootstrap.sh \
    /tmp/base-config.json \
    /tmp/host-bootstrap.env
exit
exit

첫 번째 exit가 루트 셸을 종료합니다. 두 번째는 SSH 세션을 닫고 Bash 환경으로 돌아갑니다.

Bash 환경에서 복사본을 제거합니다.

rm -f \
    "${WORK_DIR:?Load the deployment environment first.}/${AGENT_ARCHIVE}" \
    "${WORK_DIR}/bootstrap.sh" \
    "${WORK_DIR}/base-config.json" \
    "${WORK_DIR}/host-bootstrap.env" \
    "${WORK_DIR}/checksums.txt"

/etc/aks-flex-node 및 서비스 주체 자격 증명은 호스트가 연결된 상태를 유지하는 동안 유지하세요. 실행 중인 에이전트는 노드 및 Azure 컴퓨터 조정에 이 구성을 사용합니다.

Kubernetes 노드 확인

노드 이름을 공유 환경에 기록된 Linux 호스트 이름으로 설정합니다. 먼저 Node 개체가 만들어질 때까지 기다린 다음 준비가 될 때까지 기다립니다.

export FLEX_NODE_NAME="$(printf '%s' "${FLEX_HOST_NAME}" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]')"

kubectl wait \
    --for=create \
    "node/${FLEX_NODE_NAME}" \
    --timeout=5m

kubectl wait \
    --for=condition=Ready \
    "node/${FLEX_NODE_NAME}" \
    --timeout=10m

kubectl get node "${FLEX_NODE_NAME}" -o wide

노드가 Ready인 경우 계속합니다. 노드가 만들어지지 않았거나 준비되지 않은 경우 부트스트랩을 다시 시도하기 전에 부트스트랩 출력, API 연결 및 에이전트 서비스를 확인합니다.

Azure Machine 리소스 확인

  1. 대상 flex 노드 풀에 머신을 나열합니다.

    az aks machine list \
        --resource-group "${RESOURCE_GROUP}" \
        --cluster-name "${CLUSTER_NAME}" \
        --nodepool-name "${FLEX_POOL_NAME}" \
        --query "[].{name:name,state:properties.provisioningState,nodeName:properties.kubernetes.nodeName,version:properties.kubernetes.currentOrchestratorVersion}" \
        --output table
    
  2. 준비된 Kubernetes 노드를 등록한 컴퓨터를 찾습니다.

    FLEX_MACHINE_NAME="$(az aks machine list \
        --resource-group "${RESOURCE_GROUP}" \
        --cluster-name "${CLUSTER_NAME}" \
        --nodepool-name "${FLEX_POOL_NAME}" \
        --query "[?properties.kubernetes.nodeName=='${FLEX_NODE_NAME}'].name | [0]" \
        --output tsv)"
    export FLEX_MACHINE_NAME
    
    printf 'Machine: %s\n' "${FLEX_MACHINE_NAME}"
    

    명령이 정확히 하나의 컴퓨터 이름을 반환하는 경우 계속합니다.

  3. 해당 장치 표시:

    az aks machine show \
        --resource-group "${RESOURCE_GROUP}" \
        --cluster-name "${CLUSTER_NAME}" \
        --nodepool-name "${FLEX_POOL_NAME}" \
        --machine-name "${FLEX_MACHINE_NAME}" \
        --output yaml
    

    머신이 존재하고 FLEX_NODE_NAME을(를) 참조하며 프로비저닝 상태가 성공으로 보고되는 경우 계속 진행합니다. 수명 주기 작업의 컴퓨터 이름을 기록합니다.

    set_flexnode_env FLEX_MACHINE_NAME "${FLEX_MACHINE_NAME}"
    

flex 노드 네트워킹 확인

  1. flex 사이트, Pod CIDR 및 WireGuard 공개 키를 표시합니다.

    kubectl get node "${FLEX_NODE_NAME}" \
        -L net.unbounded-cloud.io/site \
        -o wide
    
    kubectl get node "${FLEX_NODE_NAME}" \
        -o jsonpath='{.metadata.name}{" site="}{.metadata.labels.net\.unbounded-cloud\.io/site}{" podCIDR="}{.spec.podCIDR}{" wg="}{.metadata.annotations.net\.unbounded-cloud\.io/wg-pubkey}{"\n"}'
    
  2. 사이트 및 관련 Unbounded-Net 네트워킹 리소스를 확인합니다.

    kubectl get \
        sites,sitenodeslices,gatewaypools,sitegatewaypoolassignments,gatewaypoolpeerings \
        -o wide
    
  3. flex 노드에 스케줄된 Unbounded-Net pod를 표시합니다.

    kubectl get pods --all-namespaces \
        --field-selector "spec.nodeName=${FLEX_NODE_NAME}" \
        -o wide
    

다음을 수행하지 않는 한 워크로드 유효성 검사를 계속하지 마세요.

  • 노드는 .입니다 Ready.
  • 사이트는 네트워킹 문서에서 구성한 Unbounded-Net flex 사이트입니다.
  • Pod CIDR은 계획된 FLEX_POD_CIDR 범위에 속합니다.
  • WireGuard 공개 키가 채워집니다.
  • cluster-flex-private-l3 SitePeering은 flex-site 및 cluster 사이트를 참조합니다.
  • 해당 노드에서 반환된 모든 Unbounded-Net 파드는 Running.
  • 공용 WireGuard 토폴로지의 경우 예상되는 게이트웨이 풀 피어링이 존재합니다.

flex 노드 에이전트 확인하기

서비스가 활성화될 때까지 최대 1분 동안 기다립니다. 그렇지 않으면 서비스 상태 및 최근 로그를 표시합니다.

ssh -i "${SSH_PRIVATE_KEY_PATH}" "${FLEX_HOST_SSH_TARGET}" \
    'set -euo pipefail
     for attempt in {1..12}; do
         if sudo systemctl is-active --quiet aks-flex-node-agent; then
             sudo systemctl show aks-flex-node-agent \
                 -p ActiveState \
                 -p SubState \
                 -p Result \
                 -p NRestarts
             exit 0
         fi
         sleep 5
     done

     sudo systemctl show aks-flex-node-agent \
         -p ActiveState \
         -p SubState \
         -p Result \
         -p NRestarts
     sudo journalctl -u aks-flex-node-agent --no-pager -n 80
     exit 1'

출력에 ActiveState=active, SubState=running, Result=success가 포함되면 계속 진행합니다.

리소스를 나열 MachineOperation 할 수 없어 에이전트가 반복적으로 다시 시작하는 경우 네트워킹 구성의 임시 flex 디먼 RBAC 단계로 돌아가 서 AKS에서 flex 노드 풀을 만들고 역할 및 바인딩이 있는지 확인한 다음 에이전트를 다시 시작합니다.

ssh -i "${SSH_PRIVATE_KEY_PATH}" "${FLEX_HOST_SSH_TARGET}" \
    'sudo systemctl restart aks-flex-node-agent'

워크로드 배치 및 연결 유효성 검사

유효성 검사 워크로드 만들기

전용 네임스페이스를 만듭니다. 이 네임스페이스가 이미 있는 경우 다시 시도하기 전에 이전 유효성 검사 실행을 정리합니다.

export VALIDATION_NAMESPACE="flex-node-validation"

if kubectl get namespace "${VALIDATION_NAMESPACE}" >/dev/null 2>&1; then
    printf 'Validation namespace already exists: %s\n' \
        "${VALIDATION_NAMESPACE}" >&2
    false
fi

kubectl create namespace "${VALIDATION_NAMESPACE}"
kubectl label namespace "${VALIDATION_NAMESPACE}" \
    app.kubernetes.io/managed-by=flex-node-article

Kubernetes 스케줄러가 flex 노드에 배치하는 HTTP 서버를 만들고 ClusterIP 서비스를 통해 노출합니다.

kubectl --namespace "${VALIDATION_NAMESPACE}" run flex-http-server \
    --image=busybox:1.36 \
    --restart=Never \
    --labels app=flex-http \
    --overrides="{\"spec\":{\"nodeSelector\":{\"kubernetes.io/hostname\":\"${FLEX_NODE_NAME}\"},\"tolerations\":[{\"operator\":\"Exists\"}]}}" \
    --command -- sh -c \
    'mkdir -p /www; echo flex-network-ok >/www/index.html; exec httpd -f -p 8080 -h /www'

kubectl --namespace "${VALIDATION_NAMESPACE}" wait \
    --for=condition=Ready \
    pod/flex-http-server \
    --timeout=3m

kubectl --namespace "${VALIDATION_NAMESPACE}" expose pod flex-http-server \
    --name=flex-http-service \
    --port=8080 \
    --target-port=8080

콜백 및 로컬 서비스 연결 확인

Kubernetes API 서버 콜백 경로를 사용하여 로그 및 명령 실행을 확인합니다.

kubectl --namespace "${VALIDATION_NAMESPACE}" logs flex-http-server --tail=5
kubectl --namespace "${VALIDATION_NAMESPACE}" exec flex-http-server -- \
    sh -c 'printf "exec-callback-ok\n"'

ClusterIP를 가져와 flex 노드 워크로드에서 서비스를 요청합니다.

SERVICE_IP="$(kubectl --namespace "${VALIDATION_NAMESPACE}" \
    get service flex-http-service \
    --output jsonpath='{.spec.clusterIP}')"
export SERVICE_IP

kubectl --namespace "${VALIDATION_NAMESPACE}" exec flex-http-server -- \
    wget -qO- "http://${SERVICE_IP}:8080"

예상되는 응답은 다음과 같습니다.

flex-network-ok

포트 전달 확인

현재 터미널에서 Kubernetes API 서버를 통해 로컬 포트를 전달합니다. 이 명령은 이전에 로드한 배포 환경 및 kubeconfig를 사용합니다.

kubectl --namespace "${VALIDATION_NAMESPACE}" \
    port-forward pod/flex-http-server 18080:8080

두 번째 터미널에서 전달된 엔드포인트를 요청합니다.

curl -fsS http://127.0.0.1:18080

예상 응답은 flex-network-ok입니다. 확인 후 첫 번째 터미널에서 Ctrl+C 를 누릅니다.

AKS 관리 노드에서 연결 확인

준비된 AKS 관리 시스템 노드를 찾습니다.

SYSTEM_NODE="$(kubectl get nodes \
    --selector agentpool=systempool \
    --output json |
    jq -r '
        .items[]
        | select(any(.status.conditions[];
            .type == "Ready" and .status == "True"))
        | .metadata.name
    ' |
    head -n 1)"
export SYSTEM_NODE

test -n "${SYSTEM_NODE}"
printf 'Managed-node test target: %s\n' "${SYSTEM_NODE}"

해당 노드에서 클라이언트 Pod를 실행하고 예상 응답을 확인합니다.

kubectl --namespace "${VALIDATION_NAMESPACE}" run system-http-client \
    --image=busybox:1.36 \
    --restart=Never \
    --overrides="{\"spec\":{\"nodeSelector\":{\"kubernetes.io/hostname\":\"${SYSTEM_NODE}\"}}}" \
    --command -- sh -c \
    "test \"\$(wget -qO- http://${SERVICE_IP}:8080)\" = flex-network-ok"

kubectl --namespace "${VALIDATION_NAMESPACE}" wait \
    --for=jsonpath='{.status.phase}'=Succeeded \
    pod/system-http-client \
    --timeout=3m

kubectl --namespace "${VALIDATION_NAMESPACE}" \
    get pod flex-http-server system-http-client -o wide

Ready 상태인 Kubernetes 노드는 노드 등록 상태를 나타냅니다. 이것만으로는 워크로드 네트워킹, 콜백 작업 또는 Azure 수명 주기 작업을 입증하지는 않습니다.

유효성 검사 워크로드 정리

이 문서에서 만든 임시 리소스만 제거합니다.

kubectl delete namespace "${VALIDATION_NAMESPACE}"

다음 단계

다음으로 연결된 flex 노드를 관리, 업데이트, 업그레이드 또는 제거합니다.