使用 Azure 门户访问 Kubernetes 资源

本文介绍如何使用 Azure 门户访问和管理 Azure Kubernetes 服务 (AKS) 资源。

先决条件

  • 若要查看 Azure 门户中的 Kubernetes 资源,需要一个 AKS 群集。 支持任何群集,但如果使用 Microsoft Entra 集成,则群集必须使用 AKS 托管的 Microsoft Entra 集成

  • 如果你的群集使用旧版 Microsoft Entra ID,则可以在门户中升级群集,或者使用 Azure CLI 进行升级。 此外,还可以使用 Azure 门户创建新 AKS 群集。

查看 Kubernetes 资源

  1. Azure 门户中导航到你的 AKS 群集资源。

  2. Azure 服务 菜单中,选择 AKS 群集,然后选择 Kubernetes 资源。 Kubernetes 资源列表显示以下类别:

    • 命名空间显示群集命名空间的相关信息。
    • “工作负荷”显示有关部署、Pod、副本集、StatefulSet、守护程序集、作业和部署到群集的 cron 作业的信息。
    • “服务和流入量”显示群集的所有服务和流入量资源。
    • 网络策略 显示控制群集内 Pod 之间的流量流的网络策略资源。
    • “存储”显示 Azure 存储类和永久卷信息。
    • “配置”显示群集的 ConfigMap 和机密。
    • 自定义资源显示部署到群集的任何自定义资源。
    • 事件显示与群集相关的所有事件。
    • 运行命令让你可以通过 Azure API 在群集上远程调用 kubectlhelm 等命令,而无需直接连接到群集。

    显示 Azure 门户中显示的 Kubernetes 资源的屏幕截图。

部署示例应用程序

在本部分中,我们将通过 AKS 快速入门部署 Azure 应用商店应用程序。

若要部署 Azure 应用商店应用程序,你需要连接到 AKS 群集。 按照以下步骤使用 Azure 门户连接到群集:

  1. 在 AKS 群集的“概述”页中,选择“连接”。
  2. 按照说明使用 Azure CLI 或运行命令连接到群集。

部署 Azure 应用商店应用程序

  1. 从“Kubernetes 资源”列表中,选择“服务和入口”。

  2. 选择“创建”“应用 YAML”。>

  3. 将以下 YAML 复制粘贴到编辑器中:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: rabbitmq
    spec:
      serviceName: rabbitmq
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: rabbitmq
              image: mcr.azk8s.cn/azurelinux/base/rabbitmq-server:3.13
              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: 100m
                  memory: 256Mi
          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: 100m
                  memory: 256Mi
    ---
    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: 2m
                  memory: 20Mi
    ---
    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 门户中显示的 Azure 应用商店应用程序服务的屏幕截图。

监视部署见解

在 AKS 群集上启用监视加载项

启用了容器见解的 AKS 群集可以在 Azure 门户中访问各种部署见解。 如果未在群集上启用监视,可以使用以下步骤启用它:

  1. 从 AKS 群集资源的服务菜单中,选择“监视”“见解”>“配置监视”。>

  2. 在“配置容器见解”页上,选择“配置”

    监视解决方案部署并开始收集数据可能需要几分钟时间。

查看部署见解

  1. 从 AKS 群集资源的服务菜单中,选择“工作负载”。
  2. 从列表中选择一个部署以查看部署见解,例如 CPU 和内存使用情况。

提示

还可以选择“监视”“见解”以查看有关特定节点和容器的更深入的信息。>

清理资源

如果不再需要 Azure 应用商店应用程序,可以删除服务以避免产生 Azure 成本。

  1. 从“Kubernetes 资源”列表中,选择“服务和入口”。
  2. 选择要删除的服务,然后选择“ 删除”。

故障排除

未经授权的访问

若要访问 Kubernetes 资源,你需要访问 AKS 群集、Kubernetes API 和 Kubernetes 对象。 请确保是 群集管理员 或具有委派访问 AKS 群集的适当权限的用户。 有关详细信息,请参阅 AKS 的访问权限和标识选项

无法访问 Kubernetes 资源查看器

可能需要配置经过授权的 IP 范围,以便为现有群集启用 Kubernetes 资源视图。

提示

可以添加 API 服务器授权 IP 范围的 AKS 功能,以将 API 服务器限制为仅访问防火墙的公共终结点。 另一个选项是更新 --api-server-authorized-ip-ranges/-ApiServerAccessAuthorizedIpRange 以包含本地客户端计算机的访问或要从其浏览 Azure 门户的 IP 地址范围。 要允许此访问,需要计算机的公共 IPv4 地址。 可以使用以下 Azure CLI 或 Azure PowerShell 命令找到此地址。

  1. 使用以下命令检索 IP 地址:

    CURRENT_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
    
  2. 使用带 az aks update 参数的 --api-server-authorized-ip-ranges 命令将 IP 地址添加到 AKS 批准的列表中。

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

后续步骤

本文介绍了如何从 Azure 门户访问 Kubernetes 资源。 有关 AKS 的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的核心概念