女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Ubuntu K8s集群安全加固方案

馬哥Linux運維 ? 來源:CSDN技術社區 ? 2025-05-12 16:17 ? 次閱讀

Ubuntu K8s集群安全加固方案

在Ubuntu系統上部署Kubernetes集群時,若服務器擁有外網IP,需采取多層次安全防護措施以確保集群安全。本方案通過系統防火墻配置、TLS通信啟用、網絡策略實施和RBAC權限控制四個核心層面,構建安全的Kubernetes環境。安全防護不應僅停留在單點措施,而應形成縱深防御體系,從物理主機到集群控制面再到應用層進行全面保護。在生產環境中,需確保所有安全配置均符合最小權限原則,并定期進行審計與監控。

一、基礎系統安全配置

Ubuntu服務器作為Kubernetes集群節點,其基礎系統安全至關重要。首先,需確保系統時間同步,這可以通過安裝NTP服務并配置可靠的NTP服務器實現。在Ubuntu上,可使用以下命令安裝并配置NTP服務:

sudoapt update
sudoapt install ntpdate ntp
sudontpdate ntp1.aliyun.com

其次,應禁用Swap功能。Kubernetes要求所有節點禁用Swap,可通過編輯/etc/fstab文件并注釋掉Swap行實現,然后執行swapoff --all命令。

然后,配置容器運行時環境。對于Ubuntu系統,推薦使用Docker或Containerd作為容器運行時。Docker安裝命令如下:

sudoapt-get update
sudoapt-get install docker.io

Containerd安裝命令如下:

sudoapt-get update
sudoapt-get install containerd

此外,還需調整Linux內核參數以支持Kubernetes網絡需求。在Ubuntu上,可通過以下命令修改內核參數:

cat>> /etc/sysctl.d/kubernetes.conf <

這些內核參數確保了容器網絡和Kubernetes組件之間的正常通信。

二、防火墻規則配置

Ubuntu服務器的防火墻規則是保護集群的第一道防線,需對非必要端口進行限制,僅開放API Server等必需端口。默認情況下,UFW(Uncomplicated Firewall)是Ubuntu的默認防火墻配置工具,提供了一個用戶友好的界面來管理Linux系統的Netfilter防火墻。

首先,安裝并啟用UFW防火墻:

sudoapt update
sudoapt install ufw
sudoufwenable

啟用UFW后,默認拒絕所有入站連接,僅允許已明確允許的連接。這是符合安全原則的默認策略。

針對Kubernetes集群,需開放以下關鍵端口:

端口 協議 用途 訪問控制
22 TCP SSH管理 僅允許特定IP或子網訪問
6443 TCP API Server 僅允許集群內節點或管理IP訪問
10250 TCP Kubelet API 僅允許集群內節點訪問
10255 TCP Kubelet只讀端口 僅允許集群內節點訪問
53 TCP/UDP DNS服務 僅允許集群內節點訪問
2379/2380 TCP etcd集群通信 僅允許主節點間通信

具體UFW規則配置示例如下:

# 允許SSH管理訪問
sudoufw allow from 192.168.1.0/24 to any port 22 proto tcp

# 允許API Server訪問(僅限集群內節點)
sudoufw allow from 10.0.0.0/24 to any port 6443 proto tcp

# 允許etcd集群通信(僅限主節點間)
sudoufw allow from <主節點IP1> to any port 2379 proto tcp
sudoufw allow from <主節點IP2> to any port 2379 proto tcp

# 允許kubelet API訪問(僅限集群內節點)
sudoufw allow from 10.0.0.0/24 to any port 10250 proto tcp

# 允許DNS服務訪問(僅限集群內節點)
sudoufw allow from 10.0.0.0/24 to any port 53 proto tcp
sudoufw allow from 10.0.0.0/24 to any port 53 proto udp

# 設置默認策略為拒絕所有入站連接
sudoufw default deny incoming





特別注意:NodePort服務端口范圍(30000-32767)僅在必要時開放,且建議限制訪問來源為特定管理IP。若集群不使用NodePort服務,應完全關閉此端口范圍。

最后,保存并應用UFW規則:

sudoufw reload
sudoufw status numbered

通過UFW規則配置,確保了只有授權流量才能訪問服務器,大大降低了被攻擊的可能性。

三、TLS安全通信配置

在Kubernetes集群中,TLS安全通信是保護控制平面和數據傳輸的關鍵機制。在初始化集群時,通過kubeadm init命令啟用TLS通信,并配置證書管理及設置token有效期。

首先,使用以下命令初始化主節點:

sudokubeadm init 
 --apiserver-advertise-address=內網IP 
 --apiserver-cert-extra-sans=外網IP 
 --pod-network-cidr=10.244.0.0/16

其中,--apiserver-cert-extra-sans參數至關重要,它允許為API Server證書添加額外的Subject Alternative Name(SAN),確保API Server可通過外網IP或域名安全訪問。

初始化完成后,立即創建帶有效期的引導token:

sudokubeadm token create --validity 24h --print-join-command

建議將默認token有效期設置為24小時,而非使用永久有效的token。這可以通過修改kubeadm配置文件并指定--token-ttl參數實現。

接下來,檢查證書有效期:

sudokubeadm certs check-expiration

控制面證書默認有效期為1年,這符合生產環境的安全要求。若需延長有效期,可通過修改kubeadm配置文件中的certificates.duration字段實現,但不建議超過1年,以降低維護復雜性。

最后,手動續簽證書(若需要):

sudokubeadm certs renew all

續簽證書后,需重啟相關組件:

systemctl restart kubelet
kubectl delete pod -n kube-system -l k8s-app=kube-apiserver
kubectl delete pod -n kube-system -l k8s-app=kube-controller-manager
kubectl delete pod -n kube-system -l k8s-app=kube-scheduler

通過以上配置,確保了Kubernetes集群內部通信的安全性,避免了未經加密的HTTP流量傳輸。

四、網絡策略插件部署與配置

部署網絡策略插件如Calico是實施Pod間通信限制和命名空間隔離的關鍵步驟。Calico不僅提供CNI(容器網絡接口)功能,還支持強大的網絡策略功能,能夠實現細粒度的Pod間通信控制。

首先,下載Calico的YAML配置文件:

curl https://docs.projectcalico.org/manifests/calico.yaml -O

然后,應用Calico配置:

kubectl apply -f calico.yaml

部署完成后,驗證Calico組件狀態:

kubectl get pods -n calico-system

確保所有Calico Pod均處于Running狀態。

接下來,實施網絡策略。建議首先啟用全局拒絕策略,作為安全基線:

apiVersion:projectcalico.org/v3
kind:GlobalNetworkPolicy
metadata:
name:default-deny
spec:
selector:all()
types:
 -Ingress
 -Egress

應用全局拒絕策略:

kubectl apply -f global-network-policy.yaml

然后,針對DNS服務創建例外策略:

apiVersion:networking.k8s.io/v1
kind:NetworkPolicy
metadata:
name:allow-dns
namespace:default
spec:
podSelector:{}
policyTypes:
 -Ingress
ingress:
 -from:
   -namespaceSelector:
     matchLabels:
      name:kube-system
   -podSelector:
     matchLabels:
      k8s-app:kube-dns
  ports:
   -protocol:TCP
    port:53
   -protocol:UDP
    port:53





應用DNS例外策略:

kubectl apply -f dns-policy.yaml

命名空間隔離示例:對于敏感命名空間如database,可創建完全隔離策略:

apiVersion:networking.k8s.io/v1
kind:NetworkPolicy
metadata:
name:default-deny
namespace:database
spec:
podSelector:{}
policyTypes:
 -Ingress
 -Egress
egress:
 -to:
   -ipBlock:
     cidr:0.0.0.0/0
    except:
     -ipBlock:
       cidr:10.0.0.0/16
 -ports:
   -protocol:TCP
    port:53
   -protocol:UDP
    port:53





此策略拒絕所有入站流量,并僅允許出站流量訪問集群內DNS服務。

網絡策略實施應遵循分階段原則:首先在測試命名空間驗證策略,確認策略生效且不影響正常功能后,再逐步擴展到生產環境。避免因策略配置錯誤導致集群網絡中斷。

五、RBAC權限控制與審計

Kubernetes的RBAC(基于角色的訪問控制)是實現權限最小化的核心機制。通過Role、ClusterRole、RoleBinding和ClusterRoleBinding,可為不同用戶和服務賬戶分配精確的權限。

首先,為開發人員創建最小權限角色:

apiVersion:rbac.authorization.k8s.io/v1
kind:Role
metadata:
namespace:dev-namespace
name:dev-namespace-role
rules:
-apiGroups:[""]
resources:["pods","services"]
verbs:["get","list","create","update","delete"]
-apiGroups:["apps"]
resources:["deployments"]
verbs:["get","list","create","update","delete"]
-apiGroups:[""]
resources:["configmaps"]
verbs:["get","list"]

然后,將角色綁定到開發人員:

apiVersion:rbac.authorization.k8s.io/v1
kind:RoleBinding
metadata:
name:dev-namespace-binding
namespace:dev-namespace
subjects:
-kind:User
name:dev-team
apiGroup:rbac.authorization.k8s.io
roleRef:
kind:Role
name:dev-namespace-role
apiGroup:rbac.authorization.k8s.io

限制默認賬戶權限是關鍵安全措施。對于defaultServiceAccount,可創建只讀角色:

apiVersion:rbac.authorization.k8s.io/v1
kind:Role
metadata:
namespace:default
name:pod-reader-role
rules:
-apiGroups:[""]
resources:["pods"]
verbs:["get","watch","list"]

然后,將只讀角色綁定到defaultServiceAccount:

apiVersion:rbac.authorization.k8s.io/v1
kind:RoleBinding
metadata:
name:read-pods
namespace:default
subjects:
-kind:ServiceAccount
name:default
namespace:default
roleRef:
kind:Role
name:pod-reader-role
apiGroup:rbac.authorization.k8s.io

定期審計集群資源和日志是安全運維的重要環節。可通過以下步驟啟用API Server審計日志:

1. 創建審計策略文件/etc/kubernetes/audit/audit-policy.yaml:

apiVersion:audit.k8s.io/v1
kind:Policy
omitStages:
-"RequestReceived"
rules:
-level:RequestResponse
verbs:["delete","deletecollection","patch","update"]
-level:Metadata
verbs:["get","list","watch"]
users:["system:kube-proxy"]
-level:None
verbs:["watch"]
users:["system:kube-proxy"]
resources:
-group:""
 resources:["endpoints","services"]
-level:None
userGroups:["system:authenticated"]
nonResourceURLs:
-"/api*"
-"/version"





2. 修改kube-apiserver配置文件:

---audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
---audit-log-path=/var/log/kubernetes/audit.log
---audit-log-maxsize=100
---audit-log-maxbackup=5
---audit-log-maxage=30

3. 重啟kubelet服務使配置生效:

systemctl restart kubelet

審計日志文件位于/var/log/kubernetes/audit.log,可通過以下命令查看:

kubectl get --raw /api/v1/namespaces/kube-system/pods/kube-apiserver-<節點名稱>/log?container=kube-apiserver

審計日志分析可通過kube-audit等工具實現。首先安裝kube-audit:

go get -u github.com/Shopify/kube-audit

然后分析審計日志:

kube-audit -f /var/log/kubernetes/audit.log

定期審計流程建議包括:

1. 每周檢查審計日志中的敏感操作(如資源刪除、角色綁定變更)。

2. 每月審查RBAC權限配置,確保所有賬戶和服務賬戶均遵循最小權限原則。

3. 每季度進行全集群安全評估,使用工具如kube-bench檢查Kubernetes安全配置。

通過以上措施,可有效監控集群中的權限使用情況,及時發現并阻止未授權操作。

六、安全加固的最佳實踐

在Ubuntu上部署Kubernetes集群時,應遵循以下最佳安全實踐

1.使用專用網絡:將集群節點部署在專用網絡上,避免直接暴露于互聯網。若必須通過外網訪問API Server,應配置負載均衡器或反向代理,并通過IP白名單限制訪問來源。

2.啟用Pod安全策略(PSP):雖然Kubernetes 1.25+已棄用Pod安全策略API,但可通過準入控制器(如OPA Gatekeeper)實現類似功能,限制Pod的特權操作。

3.使用加密的Secret:敏感信息如數據庫密碼、API密鑰等應使用Kubernetes Secret存儲,并通過kubectl create secret命令創建。

4.定期更新系統:保持Ubuntu系統和Kubernetes組件的最新版本,及時修復已知漏洞。

5.使用安全的容器鏡像:從可信來源獲取容器鏡像,并通過鏡像掃描工具(如Trivy、Clair)檢查鏡像安全。

6.實施定期備份:對集群關鍵數據(如etcd、證書)進行定期備份,確保在出現安全事件時能夠快速恢復。

7.配置監控與告警:使用Prometheus和Grafana監控集群運行狀態,設置告警規則(如異常API調用、資源使用異常)。

8.使用網絡策略插件:除Calico外,還可考慮使用Cilium等支持更復雜網絡策略的插件,實現東西向流量控制和零信任網絡架構。

安全措施 實施步驟 預期效果
防火墻配置 使用UFW限制非必要端口訪問 降低外部攻擊面
TLS啟用 通過kubeadm init配置證書 確保控制平面通信安全
網絡策略 部署Calico并配置全局拒絕策略 實現Pod間通信限制和命名空間隔離
RBAC控制 創建最小權限角色并定期審計 確保權限最小化和使用合規
審計日志 啟用API Server審計日志并分析 監控集群操作行為,及時發現異常

安全加固是一個持續的過程,而非一次性任務。建議建立安全運維的SOP(標準操作流程),定期更新安全策略,應對不斷變化的安全威脅。

七、安全加固后的集群驗證

完成安全加固后,需進行以下驗證以確保配置生效:

1.防火墻規則驗證:使用ufw status查看當前規則,確認僅開放必要端口。通過nc -zv <服務器IP> <端口>測試端口連通性,確保非授權IP無法訪問受限端口。

2.TLS通信驗證:使用kubectl cluster-info檢查API Server是否通過HTTPS訪問。訪問https://:6443并檢查證書是否有效。

3.網絡策略驗證:創建兩個測試Pod,分別位于不同命名空間,嘗試相互訪問。通過kubectl exec -it -- ping <目標pod IP>測試通信是否被策略阻止。

4.RBAC權限驗證:使用不同賬戶嘗試執行敏感操作(如創建命名空間、刪除資源),確認權限控制是否生效。

5.審計日志驗證:檢查審計日志文件/var/log/kubernetes/audit.log,確認審計事件是否被正確記錄,并使用kube-audit分析日志內容。

通過以上驗證步驟,可確保安全加固措施已正確實施,并為后續安全運維奠定基礎。

八、結論與建議

在Ubuntu系統上部署Kubernetes集群時,外網IP的存在增加了安全風險,需采取多層次安全防護措施。從系統防火墻到TLS通信,再到網絡策略和RBAC權限控制,每一層都至關重要。生產環境中應遵循最小權限原則,定期進行安全審計與監控,確保集群安全。

建議在部署Kubernetes集群前,先完成基礎系統安全加固,包括禁用Swap、配置NTP同步時間等。然后,通過UFW防火墻限制非必要端口訪問,僅開放API Server等必需端口。初始化集群時,啟用TLS安全通信,并設置引導token有效期。部署網絡策略插件如Calico,實施Pod間通信限制和命名空間隔離。最后,配置RBAC權限控制,限制默認賬戶權限,建立定期審計與日志分析流程。

安全防護不應僅停留在配置層面,而應形成持續的安全運維文化。建議定期參加安全培訓,關注Kubernetes安全動態,及時更新安全策略。同時,建立安全事件響應機制,確保在出現安全問題時能夠快速應對和恢復。

鏈接:https://blog.csdn.net/lswzw/article/details/147470317

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9682

    瀏覽量

    87268
  • 集群
    +關注

    關注

    0

    文章

    101

    瀏覽量

    17366
  • Ubuntu
    +關注

    關注

    5

    文章

    585

    瀏覽量

    30817
  • kubernetes
    +關注

    關注

    0

    文章

    239

    瀏覽量

    8967

原文標題:黑客都怕的Ubuntu K8s安全加固方案,運維必看!

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    摘要: 今天,日志服務再次升級Kubernetes(k8s)的日志解決方案。1分鐘內即可完成整個集群部署,支持動態擴容,提供采集宿主機日志、容器日志、容器stdout等所有數據源的一站式采集。點此
    發表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    摘要: 今天,日志服務再次升級Kubernetes(k8s)的日志解決方案。1分鐘內即可完成整個集群部署,支持動態擴容,提供采集宿主機日志、容器日志、容器stdout等所有數據源的一站式采集。點此
    發表于 02-28 12:50

    K8s 從懵圈到熟練 – 集群網絡詳解

    導讀:阿里云 K8S 集群網絡目前有兩種方案:一種是 flannel 方案;另外一種是基于 calico 和彈性網卡 eni 的 terway 方案
    發表于 10-14 15:06

    搭建K8s環境平臺的步驟

    1 搭建K8s環境平臺規劃1.1 單master集群1.2 多master集群
    發表于 11-04 06:03

    OpenStack與K8s結合的兩種方案的詳細介紹和比較

    OpenStack與K8S結合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發表于 10-14 09:38 ?2.8w次閱讀

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發表于 06-02 11:56 ?3634次閱讀

    K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務訪問失敗? ? ? 原因分析:證書不能被識別,其原因為:自定義證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務訪問失敗? curl: (7) Fa
    的頭像 發表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b><b class='flag-5'>集群</b>服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    k8s集群環境中工作有多快

    命令就會很低效。 今天介紹3個工具會讓你在多k8s集群環境中工作的很輕松。我將從以下幾個方面來評估工具實用性: 速度 如果你有多個k8s集群可選擇,你切換
    的頭像 發表于 05-29 14:28 ?745次閱讀
    多<b class='flag-5'>k8s</b><b class='flag-5'>集群</b>環境中工作有多快

    切換k8s上下文有多快

    use-context 命令就會很低效。 今天介紹3個工具會讓你在多k8s集群環境中工作的很輕松。我將從以下幾個方面來評估工具實用性: 速度 如果你有多個k8s集群可選擇,你切換
    的頭像 發表于 05-29 15:26 ?933次閱讀
    切換<b class='flag-5'>k8s</b>上下文有多快

    k8s是什么意思?kubeadm部署k8s集群k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful
    發表于 07-19 13:14 ?1282次閱讀

    K8s集群管理:為什么需要多集群、多集群的優勢是什么

    隨著K8s和云原生技術的快速發展,以及各大廠商在自己的數據中心使用K8s的API進行容器化應用編排和管理,讓應用交付本身變得越來越標準化和統一化,并且實現了與底層基礎設施的完全解耦,為多集群和混合云提供了一個堅實技術基礎。
    發表于 09-14 10:48 ?1930次閱讀
    <b class='flag-5'>K8s</b>多<b class='flag-5'>集群</b>管理:為什么需要多<b class='flag-5'>集群</b>、多<b class='flag-5'>集群</b>的優勢是什么

    k8s云原生開發要求

    IO性能。網絡要求穩定,建議使用私有網絡VPC,并配置與Kubernetes兼容的網絡插件。操作系統需與K8s版本匹配,虛擬化平臺支持Docker等。此外,還需關注安全配置,如禁用Swap、調整Sysctl等,以及etcd數據存儲后端的配置。合理配置硬件可確保
    的頭像 發表于 10-24 10:03 ?513次閱讀
    <b class='flag-5'>k8s</b>云原生開發要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網絡連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務
    的頭像 發表于 11-07 09:37 ?423次閱讀

    自建K8S集群認證過期

    今天使用kubectl命令查看pod信息時,一直正常運行的k8s集群突然不能訪問了,輸入任何命令都提示以下報錯。
    的頭像 發表于 02-07 12:32 ?306次閱讀

    如何通過Docker和K8S集群實現高效調用GPU

    在有GPU資源的主機安裝,改主機作為K8S集群的Node。
    的頭像 發表于 03-18 16:50 ?367次閱讀
    如何通過Docker和<b class='flag-5'>K8S</b><b class='flag-5'>集群</b>實現高效調用GPU