首页 > 解决方案 > Azure AKS:如何避免在集群创建期间在“默认”命名空间中创建资源

问题描述

我正在尝试在 Azure AKS 中创建一个 K8s 集群,当集群准备就绪时,我可以看到在default命名空间中创建了几个资源。示例秘密,配置图:

在此处输入图像描述

作为安全建议,不应在命名空间下创建任何 k8s 资源,default那么如何避免呢?它是在集群创建期间默认创建的。

标签: kubernetesazure-akskubernetes-clusterkubernetes-namespace

解决方案


我在这里发现了同样的问题

用户srbose-msft(微软员工)很好地解释了操作原理:

在 Kubernetes 中,a ServiceAccount controller 管理命名空间内的 ServiceAccount ,并确保 每个活动命名空间中都存在 名为“ default ”的ServiceAccount 。[参考]

TokenController 作为 kube-controller-manager. 它异步运行。它 监视 ServiceAccount 创建并创建相应的 ServiceAccount 令牌 Secret 以允许 API 访问。[参考] 因此, 还创建 了 默认ServiceAccount 令牌的秘密。

从作为 pod 运行的应用程序信任自定义 CA 通常需要一些额外的应用程序配置。您需要将 CA 证书包添加到 TLS 客户端或服务器信任的 CA 证书列表中。例如,您可以通过解析证书链并将解析的证书添加到结构中的 RootCAs 字段 来使用 golang TLS 配置来执行此操作tls.Config

您可以将 CA 证书作为 您的 pod 有权使用的ConfigMap分发。[参考] AKS 通过 在这些命名空间中 命名 的ConfigMap在所有活动命名空间中实现这一点。kube-root-ca.crt

您还应该在 默认命名空间中找到一个 名为 的服务 。它具有 ClusterIP 的 ServiceType 并 在默认命名空间中向集群公开了 同样在内部命名 的 API 服务器 端点kuberneteskubernetes

上面提到的所有资源都是在集群创建时设计好的, 不能阻止它们的创建。如果您尝试手动删除这些资源,它们将被重新创建以确保 kube-controller-manager.

此外:

Kubernetes 集群不应使用默认命名空间 Policy 仍处于 Preview中。目前,该模式并未明确允许 在策略评估期间排除默认命名空间中的 Kubernetes 资源。但是,在撰写本文时,架构允许 labelSelector.matchExpressions[].operator 可以将其设置为 NotIn 适合 带有标签labelSelector.matchExpressions[].values 的 Service default/kubernetes

component=apiserver

默认值 ServiceAccount、默认值 ServiceAccount token SecretRootCA ConfigMap 它们本身没有使用任何标签创建,因此无法添加到此列表中。如果这阻碍了您的用例,我会敦促您在 https://techcommunity.microsoft.com/t5/azure/ct-p/Azure分享您的反馈


推荐阅读