【问题标题】:Azure AKS: how to avoid resource creation in "default" namespace during cluster creationAzure AKS:如何避免在集群创建期间在“默认”命名空间中创建资源
【发布时间】:2021-08-20 16:20:38
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes azure-aks kubernetes-cluster kubernetes-namespace


    【解决方案1】:

    我发现问了同样的问题 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.crtConfigMaps 在所有活动命名空间中实现此功能。

    您还应该在 default 命名空间中找到一个名为 kubernetesService。它有一个 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 SecretRootCA ConfigMap 本身未使用任何标签创建,因此无法添加到此列表中。如果这阻碍了您的用例,我会敦促您在 https://techcommunity.microsoft.com/t5/azure/ct-p/Azure 分享您的反馈

    【讨论】:

    • 谢谢@Mikołaj Głodziak,我只在那里问过:)
    猜你喜欢
    • 2022-06-26
    • 2021-11-16
    • 1970-01-01
    • 2020-09-19
    • 2020-05-06
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多