다음을 통해 공유


Azure Portal을 사용하여 Kubernetes 리소스에 액세스

이 문서에서는 Azure Portal을 사용하여 AKS(Azure Kubernetes Service) 리소스에 액세스하고 이러한 리소스를 관리하는 방법을 알아봅니다.

시작하기 전에

Azure Portal에서 Kubernetes 리소스를 보려면 AKS 클러스터가 필요합니다. 모든 클러스터가 지원되지만 Microsoft Entra 통합을 사용하는 경우 클러스터에서 AKS 관리형 Microsoft Entra 통합을 사용해야 합니다. 클러스터에서 레거시 Microsoft Entra ID를 사용하는 경우 포털에서 또는 Azure CLI를 사용하여 클러스터를 업그레이드할 수 있습니다. Azure Portal을 사용하여 새 AKS 클러스터를 만들 수도 있습니다.

Kubernetes 리소스 보기

  1. Azure Portal에서 AKS 클러스터 리소스로 이동합니다.

  2. 서비스 메뉴에서 Kubernetes 리소스를 선택합니다. Kubernetes 리소스 목록에 다음 범주가 표시됩니다.

    • 네임스페이스에는 클러스터의 네임스페이스에 대한 정보가 표시됩니다.
    • 워크로드에는 배포, Pod, 복제본 세트, 상태 저장 세트, 디먼 세트, 클러스터에 배포된 cron 작업 관련 정보가 표시됩니다.
    • 서비스 및 수신은 클러스터의 서비스와 수신 리소스를 모두 표시합니다.
    • 스토리지는 Azure 스토리지 클래스 및 영구 볼륨 정보를 표시합니다.
    • 구성은 클러스터의 구성 맵 및 비밀을 표시합니다.
    • 사용자 지정 리소스에는 클러스터에 배포된 모든 사용자 지정 리소스가 표시됩니다.
    • 이벤트에는 클러스터와 관련된 모든 이벤트가 표시됩니다.
    • 실행 명령을 사용하면 클러스터에 직접 연결하지 않고도 Azure API를 통해 클러스터에서 kubectlhelm과 같은 명령을 원격으로 호출할 수 있습니다.

    Azure Portal에 표시되는 Kubernetes 리소스를 보여 주는 스크린샷.

샘플 애플리케이션 배포

이 섹션에서는 AKS 빠른 시작의 Azure Store 애플리케이션을 배포합니다.

클러스터에 연결

Azure Store 애플리케이션을 배포하려면 AKS 클러스터에 연결해야 합니다. Azure Portal을 사용하여 다음 단계에 따라 클러스터에 연결하세요.

  1. AKS 클러스터의 개요 페이지에서 연결을 선택합니다.
  2. 지침에 따라 Cloud Shell, Azure CLI 또는 실행 명령을 사용하여 클러스터에 연결합니다.

Azure Store 애플리케이션 배포

  1. Kubernetes 리소스 목록에서 서비스 및 수신을 선택합니다.

  2. 만들기>YAML 적용을 선택합니다.

  3. 다음 YAML을 복사하여 편집기에 붙여넣습니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: rabbitmq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: rabbitmq
            image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine
            ports:
            - containerPort: 5672
              name: rabbitmq-amqp
            - containerPort: 15672
              name: rabbitmq-http
            env:
            - name: RABBITMQ_DEFAULT_USER
              value: "username"
            - name: RABBITMQ_DEFAULT_PASS
              value: "password"
            resources:
              requests:
                cpu: 10m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            volumeMounts:
            - name: rabbitmq-enabled-plugins
              mountPath: /etc/rabbitmq/enabled_plugins
              subPath: enabled_plugins
          volumes:
          - name: rabbitmq-enabled-plugins
            configMap:
              name: rabbitmq-enabled-plugins
              items:
              - key: rabbitmq_enabled_plugins
                path: enabled_plugins
    ---
    apiVersion: v1
    data:
      rabbitmq_enabled_plugins: |
        [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
    kind: ConfigMap
    metadata:
      name: rabbitmq-enabled-plugins
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: rabbitmq
    spec:
      selector:
        app: rabbitmq
      ports:
        - name: rabbitmq-amqp
          port: 5672
          targetPort: 5672
        - name: rabbitmq-http
          port: 15672
          targetPort: 15672
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: order-service
      template:
        metadata:
          labels:
            app: order-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: order-service
            image: ghcr.io/azure-samples/aks-store-demo/order-service:latest
            ports:
            - containerPort: 3000
            env:
            - name: ORDER_QUEUE_HOSTNAME
              value: "rabbitmq"
            - name: ORDER_QUEUE_PORT
              value: "5672"
            - name: ORDER_QUEUE_USERNAME
              value: "username"
            - name: ORDER_QUEUE_PASSWORD
              value: "password"
            - name: ORDER_QUEUE_NAME
              value: "orders"
            - name: FASTIFY_ADDRESS
              value: "0.0.0.0"
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
          initContainers:
          - name: wait-for-rabbitmq
            image: busybox
            command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;']
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: order-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: order-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: product-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: product-service
      template:
        metadata:
          labels:
            app: product-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: product-service
            image: ghcr.io/azure-samples/aks-store-demo/product-service:latest
            ports:
            - containerPort: 3002
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 1m
                memory: 7Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: product-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3002
        targetPort: 3002
      selector:
        app: product-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: store-front
      template:
        metadata:
          labels:
            app: store-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: store-front
            image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
            ports:
            - containerPort: 8080
              name: store-front
            env:
            - name: VUE_APP_ORDER_SERVICE_URL
              value: "http://order-service:3000/"
            - name: VUE_APP_PRODUCT_SERVICE_URL
              value: "http://product-service:3002/"
            resources:
              requests:
                cpu: 1m
                memory: 200Mi
              limits:
                cpu: 1000m
                memory: 512Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    
  4. 추가를 선택합니다.

    애플리케이션 배포가 완료되면 서비스 목록에 다음 서비스가 표시됩니다.

    • order-service
    • product-service
    • rabbitmq
    • store-front

    Azure Portal에 표시되는 Azure Store 애플리케이션 서비스의 스크린샷.

배포 인사이트 모니터

AKS 클러스터에서 모니터링 추가 기능 사용

컨테이너 인사이트가 활성화된 AKS 클러스터는 Azure Portal에서 다양한 배포 인사이트에 액세스할 수 있습니다. 클러스터에 모니터링이 활성화되어 있지 않은 경우 다음 단계를 통해 활성화할 수 있습니다.

  1. AKS 클러스터 리소스의 서비스 메뉴에서 Monitoring Insights>모니터링 구성을> 선택합니다.

  2. 컨테이너 인사이트 구성 페이지에서 구성을 선택합니다.

    모니터링 솔루션을 배포하고 데이터 수집을 시작하는 데 몇 분 정도 걸릴 수 있습니다.

배포 인사이트 보기

  1. AKS 클러스터 리소스의 서비스 메뉴에서 워크로드를 선택합니다.
  2. 목록에서 배포를 선택하여 CPU 및 메모리 사용량과 같은 배포 인사이트를 확인합니다.

참고 항목

모니터링>인사이트를 선택하여 특정 노드 및 컨테이너에 대한 보다 자세한 정보를 볼 수도 있습니다.

리소스 정리

Azure Store 애플리케이션이 더 이상 필요하지 않은 경우 Azure 비용이 발생하지 않도록 서비스를 삭제할 수 있습니다.

  1. Kubernetes 리소스 목록에서 서비스 및 수신을 선택합니다.
  2. 삭제하려는 서비스를 선택한 후 삭제를 클릭합니다.

문제 해결

무단 액세스

Kubernetes 리소스에 액세스하려면 AKS 클러스터, Kubernetes API, Kubernetes 개체에 대한 액세스 권한이 있어야 합니다. AKS 클러스터에 액세스할 수 있는 적절한 권한이 있는 사용자이거나 클러스터 관리자인지 확인하세요. 자세한 내용은 AKS에 대한 액세스 및 ID 옵션을 참조하세요.

리소스 보기 사용

기존 클러스터의 경우 Kubernetes 리소스 보기를 활성화해야 할 수 있습니다.

API 서버 권한 있는 IP 범위에 대해 AKS 기능을 추가하여 API 서버 액세스를 방화벽의 퍼블릭 엔드포인트로만 제한할 수 있습니다. 또 다른 옵션은 로컬 클라이언트 컴퓨터에 대한 액세스 또는 Azure Portal을 검색하는 IP 주소 범위를 포함하도록 --api-server-authorized-ip-ranges/-ApiServerAccessAuthorizedIpRange를 업데이트하는 것입니다. 이 액세스를 허용하려면 컴퓨터의 공용 IPv4 주소가 필요합니다. 다음 Azure CLI 또는 Azure PowerShell 명령을 사용하여 IP 주소를 찾거나 브라우저에서 "내 IP 주소 확인"을 검색할 수 있습니다.

  1. 다음 명령을 사용하여 IP 주소를 검색합니다.

    CURRENT_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
    
  2. --api-server-authorized-ip-ranges 매개 변수와 함께 az aks update 명령을 사용하여 AKS 승인 목록에 IP 주소를 추가합니다.

    az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --api-server-authorized-ip-ranges $CURRENT_IP/32
    

다음 단계

이 문서에서는 Azure Portal에서 Kubernetes 리소스에 액세스하는 방법을 살펴보았습니다. AKS에 대한 자세한 내용은 AKS(Azure Kubernetes Service)의 핵심 개념을 참조하세요.