【问题标题】:How to access AKS cluster using FQDN如何使用 FQDN 访问 AKS 群集
【发布时间】:2021-09-24 08:37:49
【问题描述】:

我正在使用 Terraform 进行集群配置

这是我的脚本

resource "azurerm_resource_group" "rg" {
  name     = var.resource_group_name
  location = var.location
}

# Private DNS
resource "azurerm_private_dns_zone" "ahasa-private" {
  name                = "abhi.io"
  resource_group_name = azurerm_resource_group.rg.name
}

# AKS Cluster

resource "azurerm_kubernetes_cluster" "cluster" {
  name                = var.cluster_name
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  dns_prefix          = "learnk8scluster"

  default_node_pool {
    name       = var.default_pool_name
    node_count = var.node_count
    vm_size    = var.vm_size
    os_disk_size_gb = var.os_disk_size_gb
    enable_auto_scaling = true
    min_count           = var.min_count
    max_count           = var.
    type                 = "VirtualMachineScaleSets"
  }
    
  identity {
    type = "SystemAssigned"
  }
}

如果我输入kubectl cluster-info,我可以看到

如果我尝试在浏览器中访问CoreDNS url,它会像这样

这是什么原因。我如何访问 AKS 群集 FQDN

【问题讨论】:

    标签: terraform azure-aks terraform-provider-azure kube-dns fqdn


    【解决方案1】:

    Kubernetes 使用客户端证书、承载令牌、身份验证代理或 HTTP 基本身份验证来通过身份验证插件对 API 请求进行身份验证。有关 API 服务器身份验证的更多信息,请查看here。 AKS 不允许匿名访问 API 服务器,这就是您获得以下信息的原因:

    {
      ...
      "status": "Failure",
      "message": "Unauthorized",
      "reason": "Unauthorized",
      "code": 401
    }
    
    Directly accessing the REST API

    kubectl 处理 API 服务器的定位和身份验证。如果您想使用 http 客户端(如 curlwget)或浏览器直接访问 REST API,您可以通过多种方式定位和验证 API 服务器:

    1. 在代理模式下运行 kubectl(推荐)。推荐使用此方法,因为它使用存储的 apiserver 位置并使用自签名证书验证 API 服务器的身份。使用此方法无法进行中间人 (MITM) 攻击。
    2. 或者,您可以直接向 http 客户端提供位置和凭据。这适用于被代理混淆的客户端代码。为了防止中间人攻击,您需要将根证书导入浏览器。

    以下是一些可以帮助您入门的步骤:

    SERVICE_ACCOUNT=my-service-account
    #-- Create a service Account
    kubectl create serviceaccount $SERVICE_ACCOUNT
    #-- Create clusterrolebinding for the service account to cluster-admin clusterrole (be very cautious while assigning cluster-admin privileges)
    kubectl create clusterrolebinding my-clusterrolebinding --clusterrole cluster-admin --serviceaccount default:$SERVICE_ACCOUNT
    #-- Get the ServiceAccount's token Secret's name
    $ SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} -o json | jq -Mr '.secrets[].name | select(contains("token"))')
    #-- Extract the Bearer token from the Secret and decode
    $ TOKEN=$(kubectl get secret ${SECRET} -o json | jq -Mr '.data.token' | base64 -d)
    #-- Extract, decode and write the ca.crt to a temporary location
    $ kubectl get secret ${SECRET} -o json | jq -Mr '.data["ca.crt"]' | base64 -d > /tmp/ca.crt
    #-- Access CoreDNS API endpoint
    curl -s <CoreDNS_URL>  --header "Authorization: Bearer $TOKEN" --cacert /tmp/ca.crt
    

    注意:他的脚本依赖于jq。您也可以使用jsonpath

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 2019-10-14
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 2020-07-03
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多