다음을 통해 공유


Azure Kubernetes Fleet Manager 허브 클러스터에 대한 Kubernetes API에 액세스

적용 대상: ✔️ 허브 클러스터를 사용하는 Fleet Manager

Azure Kubernetes Fleet Manager(Kubernetes Fleet) 리소스가 허브 클러스터로 만들어진 경우 이를 사용하여 Kubernetes 리소스 전파와 같은 시나리오를 중앙에서 제어할 수 있습니다. 이 문서에서는 Kubernetes Fleet 허브 클러스터의 Kubernetes API에 액세스하는 방법을 알아보세요.

시작하기 전 주의 사항:

프라이빗 허브 클러스터를 사용하여 Azure Kubernetes Fleet Manager(Kubernetes Fleet) 리소스를 만든 경우 이를 사용하여 Kubernetes 리소스 전파와 같은 시나리오를 중앙에서 제어할 수 있습니다. 이 문서에서는 Azure Bastion의 네이티브 클라이언트 터널링 기능을 사용하여 프라이빗 Kubernetes Fleet 허브 클러스터에 대한 Kubernetes API에 안전하게 액세스하는 방법을 알아봅니다.

Azure Bastion을 사용하면 프라이빗 허브 클러스터가 엔드포인트를 외부 세계에 노출하지 않도록 보호하면서 보안 액세스를 제공합니다. 자세한 내용은 Azure Bastion이란?

시작하기 전 주의 사항:

  • Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • 허브 클러스터 및 멤버 클러스터가 있는 Kubernetes Fleet 리소스가 필요합니다. 없는 경우 Azure CLI를 사용하여 Azure Kubernetes Fleet Manager 리소스 만들기 및 멤버 클러스터 조인을 참조하세요.
  • Bastion 호스트가 이미 설치된 가상 네트워크가 필요합니다.
    • Fleet Manager가 있는 가상 네트워크에 대한 Azure Bastion 호스트를 설정해야 합니다. Azure Bastion 호스트를 설정하려면 빠른 시작: 기본 설정을 사용하여 Bastion 배포를 참조하세요.
    • Bastion은 표준 또는 프리미엄 SKU여야 하며 구성 설정에서 네이티브 클라이언트 지원을 사용하도록 설정해야 합니다.
  • 사용 중인 ID(사용자 또는 서비스 주체)에는 다음이 필요합니다.
    • Kubernetes Fleet 리소스에 대한 Microsoft.ContainerService/fleets/listCredentials/action 권한입니다.
    • Bastion 리소스에 대한 Microsoft.Network/bastionHosts/read.
    • 프라이빗 허브 클러스터의 가상 네트워크에서 Microsoft.Network/virtualNetworks/을(를) 읽습니다.

Kubernetes API에 액세스

  1. 구독 ID, 리소스 그룹 및 Kubernetes Fleet 리소스에 대해 다음 환경 변수를 설정합니다.

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. az account set 명령을 사용하여 기본 Azure 구독을 설정합니다.

    az account set --subscription ${SUBSCRIPTION_ID}
    
  3. az fleet get-credentials 명령을 사용하여 Kubernetes Fleet 허브 클러스터의 kubeconfig 파일을 가져옵니다.

    az fleet get-credentials --resource-group ${GROUP} --name ${FLEET}
    

    출력은 다음 예제와 비슷하게 표시됩니다.

    Merged "hub" as current context in /home/fleet/.kube/config
    
  4. 허브 클러스터의 Kubernetes Fleet 리소스의 FLEET_ID 값에 대해 다음 환경 변수를 설정합니다.

    export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}
    
  5. 다음 명령을 사용하여 Kubernetes Fleet 허브 클러스터에 액세스할 수 있는 ID를 권한 부여합니다.

    ROLE 환경 변수의 경우 다음 4가지 기본 제공 역할 정의 중 하나를 값으로 사용할 수 있습니다.

    • Azure Kubernetes Fleet Manager RBAC 읽기 권한자
    • Azure Kubernetes Fleet Manager RBAC 작성자
    • Azure Kubernetes Fleet Manager RBAC 관리자
    • Azure Kubernetes Fleet Manager RBAC 클러스터 관리자
    export IDENTITY=$(az ad signed-in-user show --query "id" --output tsv)
    export ROLE="Azure Kubernetes Fleet Manager RBAC Cluster Admin"
    az role assignment create --role "${ROLE}" --assignee ${IDENTITY} --scope ${FLEET_ID}
    

    출력은 다음 예제와 비슷하게 표시됩니다.

    {
      "canDelegate": null,
      "condition": null,
      "conditionVersion": null,
      "description": null,
      "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>/providers/Microsoft.Authorization/roleAssignments/<assignment>",
      "name": "<name>",
      "principalId": "<id>",
      "principalType": "User",
      "resourceGroup": "<GROUP>",
      "roleDefinitionId": "/subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Authorization/roleDefinitions/18ab4d3d-a1bf-4477-8ad9-8359bc988f69",
      "scope": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    
  1. kubectl get memberclusters 명령을 사용하여 API 서버에 액세스할 수 있는지 확인합니다.

    kubectl get memberclusters
    

    명령이 성공하면 출력은 다음 예와 비슷해야 합니다.

    NAME           JOINED   AGE
    aks-member-1   True     2m
    aks-member-2   True     2m
    aks-member-3   True     2m
    
  1. 프라이빗 플릿 매니저의 허브 클러스터로의 터널을 엽니다.

    export HUB_CLUSTER_ID=<hub-cluster-id-in-FL_resourceGroup>
    az network bastion tunnel --name <BastionName> --resource-group ${GROUP} --target-resource-id ${HUB_CLUSTER_ID}$ --resource-port 443 --port <LocalMachinePort>
    
  2. 새 터미널 창에서 Bastion 터널을 통해 허브 클러스터에 연결하고 API 서버 액세스를 확인합니다.

    kubectl get memberclusters --server=https://localhost:<LocalMachinePort>
    

    명령이 성공하면 출력은 다음 예와 비슷해야 합니다.

    NAME           JOINED   AGE
    aks-member-1   True     2m
    aks-member-2   True     2m
    aks-member-3   True     2m