【发布时间】:2021-08-20 16:20:38
【问题描述】:
我正在尝试在 Azure AKS 中创建一个 K8s 集群,当集群准备就绪时,我可以看到在 default 命名空间中创建了几个资源。示例秘密,配置映射:
作为安全建议,不应该在default 命名空间下创建 k8s 资源,那么如何避免呢?它是在集群创建过程中默认创建的。
【问题讨论】:
标签: kubernetes azure-aks kubernetes-cluster kubernetes-namespace
我正在尝试在 Azure AKS 中创建一个 K8s 集群,当集群准备就绪时,我可以看到在 default 命名空间中创建了几个资源。示例秘密,配置映射:
作为安全建议,不应该在default 命名空间下创建 k8s 资源,那么如何避免呢?它是在集群创建过程中默认创建的。
【问题讨论】:
标签: kubernetes azure-aks kubernetes-cluster kubernetes-namespace
我发现问了同样的问题 here:
用户srbose-msft(微软员工)很好的解释了操作原理:
在 Kubernetes 中,
ServiceAccount controller管理命名空间内的 ServiceAccounts,并确保每个活动命名空间中都存在名为“default”的 ServiceAccount . [Reference]TokenController 作为
kube-controller-manager的一部分运行。它异步运行。它监视 ServiceAccount 创建并创建相应的 ServiceAccount 令牌 Secret 以允许 API 访问。 [Reference] 因此,default ServiceAccount 令牌 的secret 也被创建。信任作为 pod 运行的应用程序的自定义 CA 通常需要一些额外的应用程序配置。您需要将 CA 证书包添加到 TLS 客户端或服务器信任的 CA 证书列表中。例如,您可以通过解析证书链并将解析的证书添加到
tls.Config结构中的RootCAs字段来使用 golang TLS 配置来执行此操作。您可以将 CA 证书分发为您的 pod 有权使用的 ConfigMap。 [Reference] AKS 通过在这些命名空间中名为
kube-root-ca.crt的 ConfigMaps 在所有活动命名空间中实现此功能。您还应该在 default 命名空间中找到一个名为
kubernetes的 Service。它有一个 ClusterIP 的 ServiceType,并且将 API 服务器 Endpoint 也称为kubernetes在默认命名空间中的集群内部。上述所有资源将在创建集群时按设计创建,并且它们的创建无法阻止。如果您尝试手动删除这些资源,它们将被重新创建以确保
kube-controller-manager达到所需的目标状态。
另外:
Kubernetes clusters should not use the default namespace 政策仍处于预览阶段。目前,该模式不允许在策略评估期间排除 default 命名空间中的 Kubernetes 资源。但是,在撰写本文时,该架构允许
labelSelector.matchExpressions[].operator可以设置为NotIn,并为带有标签的服务 default/kubernetes 设置适当的labelSelector.matchExpressions[].values:
component=apiserver默认
ServiceAccount、默认ServiceAccount token Secret和RootCA ConfigMap本身未使用任何标签创建,因此无法添加到此列表中。如果这阻碍了您的用例,我会敦促您在 https://techcommunity.microsoft.com/t5/azure/ct-p/Azure 分享您的反馈
【讨论】: