首页天道酬勤为什么要用k8s(kafka权威指南)

为什么要用k8s(kafka权威指南)

admin 11-30 22:38 345次浏览

在容器环境中,K8S管理的容器集群有几个、几百个甚至几千个节点,其配置的重要性不可忽视。K8S的配置选项非常复杂,有些安全功能默认不开启,增加了安全管理的难度。如何有效利用Pod安全策略、网络策略、API服务器、Kubelet等K8S组件和功能策略,构建安全的K8S环境?青腾云安泉为您整理了以下12个最佳做法,全面加固K8S。

1.将K8S更新到最新的稳定版本。

新版本的K8S通常会引入一系列不同的安全功能,提供关键的安全补丁等。将K8S的部署更新到最新的稳定版本,并使用达到稳定状态的API,可以补救一些已知的安全隐患,帮助解决K8S影响较大的安全缺陷,大大减少攻击面。

2.使用Pod策略防止使用风险容器/Pod

PodSecurityPolicy是K8S中可用的集群级资源。该功能可以通过启用PodSecurityPolicy准入控制器来使用。用户必须至少授权一个策略,否则将不允许在群集中创建Pod。Pod安全策略解决了以下关键安全用例:

防止容器在特权模式下运行,因为这种类型的容器将拥有底层主机可用的大部分功能,防止容器共享不必要的名称空间,如PID、IPC、NET等。并确保Docker容器和底层主机之间的适当隔离,以限制卷的类型。例如,通过可写主机路径目录卷,操作员可以写入文件系统,允许容器在路径前缀之外自由移动。因此,请使用readonly:true来限制主机文件系统的使用。通过ReadOnlyRootFilesystem将根文件系统设置为只读。基于默认允许权限升级和允许权限缩放选项,防止Pod和Pod中的进程获得高权限。在遵循最小权限原则的前提下,将Linux功能限制在最小权限。此外,一些Pod属性也可以由securityContext控制。

3.使用K8S命名空间正确隔离K8S资源。

命名空间允许您创建逻辑分区,强制分离资源,并限制用户权限的范围。命名空间中的资源名称必须是唯一的,并且不能相互嵌套。每个K8S资源只能位于一个命名空间中。创建命名空间时,避免使用前缀kube-因为kube-用于K8S系统的命名空间。

4.使用网络策略限制容器和Pod之间的通信。

网络策略功能规定了Pod组之间以及Pod组与其他网络端点之间的通信方式,可以理解为K8S的防火墙。虽然Kubernetes支持NetworkPolicy资源的操作,但是如果没有实现该资源的插件,只创建资源是无效的。可以使用支持网络策略的网络插件,如Calico、Cilium、Kube-router、Romana、Weave Net等。

如果允许适用于Pod的网络策略,将允许与Pod的连接。为了澄清哪些PODs可以被允许访问互联网,如果在每个命名空间中使用默认的-deny-all命令,则所有PODs不能相互连接或从互联网接收流量。对于大多数应用程序,您可以通过设置特定的标签来为这些标签创建网络策略,以允许一些POd接收来自外部的流量。

5.使用ImagePolicyWebhook策略管理镜像源。

您可以防止未经身份验证的映像被访问控制器ImagePolicyWebhook使用,从而拒绝使用未经身份验证的映像创建Pod,包括最近未扫描的映像、未列入白名单的基本映像以及来自不安全镜像仓库的映像。

6.K8S API服务器的安全配置

Kubernetes API服务器处理来自运行在集群中的用户或应用程序的REST API调用,以实现集群管理。在主节点上运行ps -ef | grep kube-apiserver命令,并检查输出中的以下信息:

7.库贝调度器的安全配置

Kube-scheduler作为K8S的默认调度器,负责监控新创建的未分配节点Pod,从而调度Pod在合适的节点上运行。在主节点上运行ps -ef | grep kube-scheduler命令,并检查输出中的以下信息:

- profiling被设置为false,以大大减少攻击面。当遇到系统性能瓶颈时,概要分析可以通过识别和定位瓶颈来发挥作用,这对性能调优有很大帮助。- address设置为127.0.0.1,这样可以防止编舞绑定到非环回的不安全地址。8.库贝控制器管理器的安全配置

在主节点上运行PS-ef | grepkube-controller-manager命令,并检查输出中的以下信息:

-terminated-pod-GC-threshold设置为适当的值,以确保有足够的可用资源,这不会导致性能下降。- profilingargument设置为false。-use-service-account-credentials设置为true。此设置可以匹配

合RBAC使用,确保控制环路以最小权限原则运行。--service-account-private-key-file设置为单独的公钥/私钥对,用于签署服务账户令牌。--root-ca-file设置为一个适合的值,在包含API服务器的服务证书的根证书中进行设置,这样Pod会先验证API服务器的服务证书,然后再建立连接。--RotateKubeletServerCertificate设置为true,并且只适用于Kubelets从API服务器获得其证书的情况下。--address argument设置为127.0.0.1,确保控制管理器服务不会与非回环的不安全地址绑定。

9、安全配置Etcd

Etcd是一种分布式键值存储,实现跨集群存储数据。K8S集群都使用Etcd作为主要的数据存储方式,来处理K8S集群状态的存储和复制数据,使系统人员可以根据需要从Etcd读取并写入数据。安全地配置Etcd与其服务器的通信是最关键的。在Etcd服务器节点上运行ps -ef | grep etcd命令,并检查输出中的以下信息:

--cert-file和 --key-file根据需要设置,以确保客户端连接只通过TLS(传输中加密)提供服务。--client-cert-auth 设置为true,确保所有用户的访问都会包括一个有效的客户端证书。--auto-tls不要设置为true,这会禁止客户在TLS中使用自签名的证书。如果使用的是Etcd集群(而非单一的Etcd服务器),要检查一下--peer-cert-file 和--peer-key-file 参数是否设置正确,以确保同级别的Etcd连接在Etcd集群中被加密。此外,检查--peer-client-cert-auth 参数是否设置为true,确保只有经过认证的同级别的Etcd才能访问Etcd集群。最后检查一下--peer-auto-tls 参数是否设置为true。不要为Etcd与Kubernetes使用相同的授权证书,可以通过验证API服务器的--client-ca-file引用的文件与Etcd使用的--trusted-ca-file之间的差别来确保这种区分情况。

10、安全配置Kubelet

Kubelet是运行在每个节点上的主要“节点代理”,错误地配置Kubelet会面临一系列的安全风险,所以,可以使用运行中的Kubelet可执行文件参数或Kubelet配置文件来设置Kubelet配置。找到Kubelet配置文件(通过config 参数可找到Kubelet配置文件的位置),运行ps -ef | grep kubelet | grep config 命令,并检查输出中的以下信息:

--anonymous-auth 设置为false。常见的错误配置之一是允许Kubelet服务器提供匿名和未经验证的请求。--authorization-mod设置为AlwaysAllow。若使用默认配置值,要确保有--config 指定的Kubelet配置文件,并且该文件将authorization: mode 设置为AlwaysAllow以外的配置。--client-ca-file 设置的是客户端证书授权的位置。若使用默认配置值,要确保有一个由--config指定的Kubelet配置文件,并且该文件已经过认证,同时将x509:clientCAFile 设置为客户端证书授权的位置。--read-only-port 设置为0,若使用默认配置值,要确保有一个由config指定的文件,如果要设置适合的值,则将readOnlyPort设置为0。--protect-kernel-defaults设置为true。若使用默认配置值,要确保有一个由config指定的文件,并且该文件已将protectKernelDefaults设置为true。--hostname-override 使用默认配置值,确保Kubelet和API服务器之间TLS设置没有中断。--event-qps设置为0。若使用默认配置值,要确保有一个由config指定的kubelet配置文件,并且eventRecordQPS设置为0。--tls-cert-file和--tls-private-key-file参数设置为合适的值。通过--config所指定的Kubelet config包含tlsCertFile 和 tlsPrivateKeyFile,确保Kubelet上的所有连接都是通过TLS进行的。如果Kubelet从API服务器获得证书,将RotateKubeletServerCertificate和--rotate-certificates设置为true,确保Kubelet只使用强密码。

11、确保主节点的配置文件安全

主节点上的配置文件安全主要涉及到确保API服务器的Pod规范文件权限和所有权、控制管理器Pod规范文件的权限和所有权、编排器Pod规范文件的权限和所有权、Etcd Pod规范文件的权限和所有权、容器网络接口文件的权限和所有权、Etcd数据目录的权限和所有权、admins.conf文件的权限和所有权、scheduler.conf文件的权限和所有权、controller-manager.conf文件权限和所有权、Kubernetes PKI目录&文件权限和所有权、Kubernetes PKI密钥文件权限等安全性。

以API服务器的Pod规范文件权限和所有权为例:

文件权限:在主节点上运行stat -c %a /etc/kubernetes/manifests/kube-apiserver.yaml 命令 (指定系统的文件位置),在输出中检查和确保权限是644或更多权限限制,并保持文件的完整性。

所有权:在主节点上运行stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml命令 (指定系统的文件位置),在输出中检查和确保所有权权限设置为root:root。

12、确保工作节点的配置文件安全

保护工作节点的配置文件安全包括确保Kubelet服务文件权限、Kubelet.conf文件权限和所有权、Kubelet服务文件所有权、代理Kubeconfig文件的权限和所有权、证书管理中心的文件权限、客户端证书管理中心的文件所有权、Kubelet配置文件的权限和所有权。

以Kubelet服务文件权限为例:在主节点上运行stat-c%a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf命令 (指定系统的文件位置),在输出中检查和确保权限是644或更多权限限制,并保持文件的完整性。

总结

K8S提供了创建安全应用的强大功能,但我们需要确保所有的配置设置正确。上文介绍的这些配置、代码示例和详细建议,可帮助您避免最常见的K8S错误配置相关的安全风险。

大小单双走势规律口诀let配置文件的位置),运行ps -ef | grep kubelet | grep config 命令,并检查输出中的以下信息:

--anonymous-auth 设置为false。常见的错误配置之一是允许Kubelet服务器提供匿名和未经验证的请求。--authorization-mod设置为AlwaysAllow。若使用默认配置值,要确保有--config 指定的Kubelet配置文件,并且该文件将authorization: mode 设置为AlwaysAllow以外的配置。--client-ca-file 设置的是客户端证书授权的位置。若使用默认配置值,要确保有一个由--config指定的Kubelet配置文件,并且该文件已经过认证,同时将x509:clientCAFile 设置为客户端证书授权的位置。--read-only-port 设置为0,若使用默认配置值,要确保有一个由config指定的文件,如果要设置适合的值,则将readOnlyPort设置为0。--protect-kernel-defaults设置为true。若使用默认配置值,要确保有一个由config指定的文件,并且该文件已将protectKernelDefaults设置为true。--hostname-override 使用默认配置值,确保Kubelet和API服务器之间TLS设置没有中断。--event-qps设置为0。若使用默认配置值,要确保有一个由config指定的kubelet配置文件,并且eventRecordQPS设置为0。--tls-cert-file和--tls-private-key-file参数设置为合适的值。通过--config所指定的Kubelet config包含tlsCertFile 和 tlsPrivateKeyFile,确保Kubelet上的所有连接都是通过TLS进行的。如果Kubelet从API服务器获得证书,将RotateKubeletServerCertificate和--rotate-certificates设置为true,确保Kubelet只使用强密码。

11、确保主节点的配置文件安全

主节点上的配置文件安全主要涉及到确保API服务器的Pod规范文件权限和所有权、控制管理器Pod规范文件的权限和所有权、编排器Pod规范文件的权限和所有权、Etcd Pod规范文件的权限和所有权、容器网络接口文件的权限和所有权、Etcd数据目录的权限和所有权、admins.conf文件的权限和所有权、scheduler.conf文件的权限和所有权、controller-manager.conf文件权限和所有权、Kubernetes PKI目录&文件权限和所有权、Kubernetes PKI密钥文件权限等安全性。

以API服务器的Pod规范文件权限和所有权为例:

文件权限:在主节点上运行stat -c %a /etc/kubernetes/manifests/kube-apiserver.yaml 命令 (指定系统的文件位置),在输出中检查和确保权限是644或更多权限限制,并保持文件的完整性。

所有权:在主节点上运行stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml命令 (指定系统的文件位置),在输出中检查和确保所有权权限设置为root:root。

12、确保工作节点的配置文件安全

保护工作节点的配置文件安全包括确保Kubelet服务文件权限、Kubelet.conf文件权限和所有权、Kubelet服务文件所有权、代理Kubeconfig文件的权限和所有权、证书管理中心的文件权限、客户端证书管理中心的文件所有权、Kubelet配置文件的权限和所有权。

以Kubelet服务文件权限为例:在主节点上运行stat-c%a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf命令 (指定系统的文件位置),在输出中检查和确保权限是644或更多权限限制,并保持文件的完整性。

总结

K8S提供了创建安全应用的强大功能,但我们需要确保所有的配置设置正确。上文介绍的这些配置、代码示例和详细建议,可帮助您避免最常见的K8S错误配置相关的安全风险。

html5中marquee标签如何用blog系统-安装hexo在字符串中搜索符合特定条件的子字符串UCloud优刻得与奇安信集团携手战略合作Vuetify:油门/反跳v自动完成运行JSONEncode时是否可以排除已经为JSON的字段?怎么利用CSS实现文字二次加粗和多重边框效果clipse项目迁移到androidstudio的方法(图文最新版)
排列三走势图带连线(排列五最近200期) 不踩坑不(踩坑王)
相关内容