k8s 集群管理(k8s集群管理平台)

文章前言

Kubernetes是当今最流行的容器编排工具之一,为企业应用部署和管理提供了高效、稳定的解决方案。然而在运行Kubernetes集群时,管理员需要对集群内的各个组件进行监控和维护。了解集群信息收集的方法和技巧,可以帮助管理员更好地管理和维护Kubernetes集群。本文将从不同角度介绍Kubernetes集群信息收集的相关技术,并提供一些实用的工具和方法,帮助管理员更好地理解和使用Kubernetes集群信息收集技术,进一步提升Kubernetes集群的安全性和可靠性,同时也为安全人员在做集群安全时的信息收集提供一种参考

外部信息

集群信息
kubectl cluster-info

集群列表
kubectl config get-clusters

k8s 集群管理(k8s集群管理平台)

用户列表
kubectl config get-contexts

k8s 集群管理(k8s集群管理平台)

环境变量
env

k8s 集群管理(k8s集群管理平台)

env | grep KUBE

k8s 集群管理(k8s集群管理平台)

配置信息
#上方路径cat /home/r00t/.kube/config

k8s 集群管理(k8s集群管理平台)

节点信息
#节点列表kubectl get nodes
#node1地址ping node1 -c 1
#node2地址ping node2 -c 1

k8s 集群管理(k8s集群管理平台)

资源列表
kubectl get all

k8s 集群管理(k8s集群管理平台)

k8s 集群管理(k8s集群管理平台)

命名空间
kubectl get namespaces

k8s 集群管理(k8s集群管理平台)

Pod信息
#获取Podkubectl get pod

k8s 集群管理(k8s集群管理平台)

#Pod详细信息kubectl describe pod <PodName>

k8s 集群管理(k8s集群管理平台)

#yaml格式显示Pod的详细信息kubectl get pod <pod-name> -o yaml

k8s 集群管理(k8s集群管理平台)

#获取所有pod信息kubectl get pods --all-namespaces -o wide

k8s 集群管理(k8s集群管理平台)

服务信息
kubectl get service

k8s 集群管理(k8s集群管理平台)

kubectl describe service <ServiceName>

k8s 集群管理(k8s集群管理平台)

DPLM信息

#deployment基础信息kubectl get deployment

k8s 集群管理(k8s集群管理平台)

#deployment详细信息kubectl describe deployment <deploymentName>

k8s 集群管理(k8s集群管理平台)

日志信息
#系统日志cat /var/log/messages

k8s 集群管理(k8s集群管理平台)

#组件日志journalctl -u kube-apiserverjournalctl -u kube-schedulerjournalctl -u kubelet |tail

k8s 集群管理(k8s集群管理平台)

#容器日志docker logs <容器ID>

k8s 集群管理(k8s集群管理平台)

SSH私钥

    ls -al ~/ls -al ~/.sshcat ~/.ssh/id_rsa

    k8s 集群管理(k8s集群管理平台)

    历史命令

    查看历史命令记录来检索是否有敏感的历史连接记录以及连接账户密码信息等:

    cat ~/.bash_history

    k8s 集群管理(k8s集群管理平台)

    面板相关
    #查看面板pod和service状态kubectl get pods,svc -n kubernetes-dashboard -o wide

    k8s 集群管理(k8s集群管理平台)

    #查看serviceaccount和secretskubectl get sa,secrets -n kubernetes-dashboard

    k8s 集群管理(k8s集群管理平台)

    #查看tokenkubectl describe secrets kubernetes-dashboard-token-8kxnh -n kubernetes-dashboard

    k8s 集群管理(k8s集群管理平台)

    #查看tokenkubectl describe secret admin-myuser-token-jcj9d -n kubernetes-dashboard

    登录dashboard

    k8s 集群管理(k8s集群管理平台)

    内部信息

    环境信息
    env

    k8s 集群管理(k8s集群管理平台)

    env | grep KUBERNETES

    k8s 集群管理(k8s集群管理平台)

    容器检测
    ls -al

    k8s 集群管理(k8s集群管理平台)

    内核版本

    需要下载kubectl到pod中,之后通过执行以下命令来获取node节点的内核版本信息

    kubectl get nodes -o jsonpath=\\\'{range .items[*]}{.metadata.name}{\\\"\\\\t\\\"}{.status.nodeInfo.kernelVersion}{\\\"\\\\n\\\"}{end}\\\'

    k8s 集群管理(k8s集群管理平台)

    Token类

    K8s集群创建的Pod中容器内部默认携带K8s Service Account认证凭据(/run/secrets/kubernetes.io/serviceaccount/token),利用该凭据可以认证K8s API-Server服务器并访问高权限接口,如果执行成功意味着该账号拥有高权限,可以直接利用Service Account管理K8s集群

    cat /var/run/secrets/kuberenetes.io/serviceaccount/token

    k8s 集群管理(k8s集群管理平台)

    Secret类

    K8s Secrets用于存储敏感数据,从Secrets中获取的AK及通信凭证可用户后续渗透中从外部或云产品API窃取信息:

    #命令格式./cdk run k8s-secret-dump (auto|<service-account-token-path>)    #使用实例./cdk run k8s-secret-dump auto

    k8s 集群管理(k8s集群管理平台)

    安全策略

    对于已经获取了kubeconfig或sa账号权限,进而想要创建特殊配置的容器,但是受到了K8s Pod Security Policies的限制时可以使用这个Exploit获取Pod Security Policies的规则信息

    #命令格式./cdk run k8s-psp-dump (auto|<service-account-token-path>
    #使用实例./cdk run k8s-psp-dump auto2021/03/24 22:15:58 getting K8s api-server API addr. Find K8s api-server in ENV: https://ip:84432021/03/24 22:15:58 trying to dump K8s Pod Security Policies with local service-account: token2021/03/24 22:15:58 requesting /apis/policy/v1beta1/podsecuritypolicies2021/03/24 22:15:58 dump Pod Security Policies success, saved in: k8s_pod_security_policies.json2021/03/24 22:15:58 requesting /api/v1/namespaces/default/pods2021/03/24 22:15:58 K8S Pod Security Policies rule list:2021/03/24 22:15:58 rule { securityContext.hostPID: true } is not allowed.2021/03/24 22:15:58 rule { securityContext.hostIPC: true } is not allowed.2021/03/24 22:15:58 rule { volumes[0].hostPath.pathPrefix: \\\\\\\"/proc\\\\\\\" } is not allowed.2021/03/24 22:15:58 rule { volumes[1].hostPath.pathPrefix: \\\\\\\"/dev\\\\\\\" } is not allowed.2021/03/24 22:15:58 rule { volumes[2].hostPath.pathPrefix: \\\\\\\"/sys\\\\\\\" } is not allowed.2021/03/24 22:15:58 rule { volumes[3].hostPath.pathPrefix: \\\\\\\"/\\\\\\\" } is not allowed.2021/03/24 22:15:58 rule { containers[0].securityContext.capabilities.add: \\\\\\\"SYS_ADMIN\\\\\\\" } is not allowed.2021/03/24 22:15:58 rule { containers[0].securityContext.capabilities.add: \\\\\\\"SYS_PTRACE\\\\\\\" } is not allowed.
    端口服务

    内部网络
    • Flannel默认使用10.244.0.0/16网络

    • Calico默认使用192.168.0.0/16网络

    文末小结

    总的来说,Kubernetes集群信息收集是保证企业应用部署和运行环境安全性和稳定性的关键一环。在文章中,我们介绍了从多个角度收集Kubernetes集群信息的方法和技巧,包括:

    1、收集物理资源信息:通过使用工具(如Prometheus)来监控节点、CPU、内存等物理资源的利用率,以及检查硬件故障。 
    2、收集日志信息:通过使用工具(如ELK Stack或Fluentd)来聚合、搜索和分析各个组件的日志,快速识别和解决问题。 
    3、收集网络信息:使用工具(如Weave Scope或Cilium)来监视容器之间的网络通信,并检查网络连接和流量是否正常。 
    4、收集安全信息:使用工具(如Kube-Bench)来检测Kubernetes集群是否符合最佳实践和安全标准,并发现潜在的安全漏洞和风险。 
    5、收集运行时信息:使用工具(如Datadog或Sysdig)来监控Kubernetes集群中的容器应用程序运行状态,以便实时发现和修复问题。

    需要注意的是以上信息收集技术并不是全部,管理员可以根据集群需求和特点,选择适合自己的信息收集技术和工具。同时对于Kubernetes集群信息收集的实践过程中,管理员需要时刻保持警惕,定期检查和修正配置和设置,以确保集群的安全性和稳定性。

    原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34150.html

    Like (0)
    七芒星实验室的头像七芒星实验室
    Previous 2024年4月5日
    Next 2024年4月5日

    相关推荐

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注