欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言k8s二次開發(fā) go 并發(fā)編程第二版

運(yùn)維工程師必須掌握的基礎(chǔ)技能有哪些?

運(yùn)維工程師必須掌握的基礎(chǔ)技能有:基礎(chǔ)命令、基礎(chǔ)服務(wù)、自動(dòng)化技能、安全。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、固陽ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的固陽網(wǎng)站制作公司

1、基礎(chǔ)命令:

這個(gè)基礎(chǔ)就包括:用戶管理命令,文件管理命令,權(quán)限管理命令,軟件包管理命令,vim命令,網(wǎng)絡(luò)管理命令等。這些命令好學(xué),因?yàn)槊總€(gè)命令都有相應(yīng)的help幫助文檔,而且很多網(wǎng)站都集成了命令幫助,把這些站點(diǎn)進(jìn)行收藏,時(shí)不時(shí)的查下就記住了。

2、基礎(chǔ)服務(wù):

企業(yè)常用的基礎(chǔ)服務(wù)就包括DHCP,NTP,DNS,Nginx,Apache,Mysql,Redis,Vsftpd,Nfs。基礎(chǔ)服務(wù)的掌握,相比命令稍微的難一點(diǎn),但是同樣有很多技巧。比如可以去各大視頻站獲取優(yōu)質(zhì)的免費(fèi)視頻學(xué)習(xí)。

3、自動(dòng)化技能:

這個(gè)自動(dòng)化就包括腳本自動(dòng)化,需要熟悉掌握shell腳本或者Python腳本;包括監(jiān)控自動(dòng)化,不能靠傳統(tǒng)的點(diǎn)擊頁面,查看進(jìn)程來判斷服務(wù)是否在線,需要熟悉掌握zabbix,Prometheus等主流監(jiān)控軟件;還包括工具自動(dòng)化,需要掌握向ansible,puppet,Jenkins等自動(dòng)化軟件,實(shí)現(xiàn)服務(wù)的批量部署與業(yè)務(wù)的自動(dòng)化。

4、安全:

作為運(yùn)維工程師,首先就要時(shí)刻保障公司業(yè)務(wù)系統(tǒng),服務(wù)器安全穩(wěn)定運(yùn)行。所以安全至關(guān)重要,主流的iptables,firewalld防火墻技術(shù)要熟練掌握,有必要的話常見的挖礦病毒,ddos等攻擊有段也要有所了解。

運(yùn)維工程師(Operations),負(fù)責(zé)維護(hù)并確保整個(gè)服務(wù)的高可用性,同時(shí)不斷優(yōu)化系統(tǒng)架構(gòu)提升部署效率、優(yōu)化資源利用率提高整體的ROI。

運(yùn)維工程師面對(duì)的最大挑戰(zhàn)是大規(guī)模集群的管理問題,如何管理好幾十萬臺(tái)服務(wù)器上的服務(wù),同時(shí)保障服務(wù)的高可用性,是運(yùn)維工程師面臨的最大挑戰(zhàn)。

什么是K8S?

k8s是什么?

Kubernetes 是一個(gè)可移植的,可擴(kuò)展的開源容器編排平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),方便了聲明式配置和自動(dòng)化。它擁有一個(gè)龐大且快速增長的生態(tài)系統(tǒng)。Kubernetes 的服務(wù),支持和工具廣泛可用。

為什么現(xiàn)在流行使用容器?

早期: 在物理服務(wù)器上面部署應(yīng)用程序存在資源分配問題,因?yàn)槠洳荒茉谖锢矸?wù)器中的應(yīng)用程序定義資源邊界,導(dǎo)致應(yīng)用程序資源利用不足而無法擴(kuò)展.

后來: 為了解決該問題,引入了虛擬化技術(shù), 虛擬化技術(shù)是指允許你在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多個(gè)虛擬機(jī),可以讓多個(gè)應(yīng)用程序在虛擬機(jī)之間進(jìn)行隔離,具有一定的安全性, 每一個(gè)虛擬機(jī)就是一臺(tái)完整的計(jì)算機(jī), 在虛擬化硬件之上運(yùn)行所有組件.

現(xiàn)在: 多數(shù)在物理服務(wù)器上面部署應(yīng)用程序都是采kubectl用容器的方式,容器類似于虛擬機(jī),它們都具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等, 且由于它們與基礎(chǔ)架構(gòu)分離,因此可以跨云和 OS 發(fā)行版本進(jìn)行移植。基于此特點(diǎn)被企業(yè)大范圍使用.

為什么需要使用k8s容器?

若出現(xiàn)這樣一個(gè)環(huán)境: 在生產(chǎn)環(huán)境中如果一個(gè)容器發(fā)生故障,則我們需要手動(dòng)去啟動(dòng)另外一個(gè)容器,這樣的操作是對(duì)我們的管理員來說是不太方便的, 若一個(gè)容器出現(xiàn)故障,另一個(gè)容器可以自動(dòng)啟動(dòng)容器接管故障的容器,這樣是最好的.

k8s就可以實(shí)現(xiàn)該效果,Kubernetes 提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架。 Kubernetes 會(huì)滿足你的擴(kuò)展要求、故障轉(zhuǎn)移、部署模式等。

k8s功能: 服務(wù)發(fā)現(xiàn)和負(fù)載均衡, 存儲(chǔ)編排, 自動(dòng)部署和回滾, 自動(dòng)完成裝箱計(jì)算, 自我修復(fù), 密鑰與配置管理

名詞解釋

secret

Secret有三種類型:

Service Account:用來訪問Kubernetes API,由Kubernetes自動(dòng)創(chuàng)建,并且會(huì)自動(dòng)掛載到Pod的目錄中;

/run/secrets/kubernetes.io/serviceaccount

Opaque:base64編碼格式的Secret,用來存儲(chǔ)密碼、密鑰等;

kubernetes.io/dockerconfigjson:用來存儲(chǔ)私有docker registry的認(rèn)證信息。

k8s的組成

k8s是由組件,API,對(duì)象等組成.

包含所有相互關(guān)聯(lián)組件的 Kubernetes 集群圖如下:

組件

控制平面組件

kube-apiserver: 為k8s的api服務(wù)器,公開了所有Kubernetes API, 其他所有組件都必須通過它提供的API來操作資源數(shù)據(jù).

保證集群狀態(tài)訪問的安全

隔離集群狀態(tài)訪問的方式和后端存儲(chǔ)實(shí)現(xiàn)的方式:API Server是狀態(tài)訪問的方式,不會(huì)因?yàn)楹蠖舜鎯?chǔ)技術(shù)etcd的改變而改變。

etcd: 為k8s的鍵值數(shù)據(jù)庫,保存了k8s所有集群數(shù)據(jù)的后臺(tái)數(shù)據(jù)庫。

kube-scheduler: 收集和分析當(dāng)前Kubernetes集群中所有Node節(jié)點(diǎn)的資源(內(nèi)存、CPU)負(fù)載情況,然后依此分發(fā)新建的Pod到Kubernetes集群中可用的節(jié)點(diǎn)。 kube-controller-manager: 在主節(jié)點(diǎn)上運(yùn)行 控制器 的組件。

cloud-controller-manager: 云控制器管理器是指嵌入特定云的控制邏輯的 控制平面組件

Node 組件

kubelet: 一個(gè)在集群中每個(gè)節(jié)點(diǎn)(node)上運(yùn)行的代理。 它保證容器(containers)都 運(yùn)行在 Pod 中。

kube-proxy: kube-proxy是集群中每個(gè)節(jié)點(diǎn)上運(yùn)行的網(wǎng)絡(luò)代理,維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則。這些網(wǎng)絡(luò)規(guī)則允許從集群內(nèi)部或外部的網(wǎng)絡(luò)會(huì)話與 Pod 進(jìn)行網(wǎng)絡(luò)通信。

容器運(yùn)行時(shí): 負(fù)責(zé)運(yùn)行容器的軟件。

插件(Addons)

DNS: 集群 DNS 是一個(gè) DNS 服務(wù)器,和環(huán)境中的其他 DNS 服務(wù)器一起工作,它為 Kubernetes 服務(wù)提供 DNS 記錄。

Web 界面(儀表盤): Dashboard 是Kubernetes 集群的通用的、基于 Web 的用戶界面。

容器資源監(jiān)控: 容器資源監(jiān)控 將關(guān)于容器的一些常見的時(shí)間序列度量值保存到一個(gè)集中的數(shù)據(jù)庫中,并提供用于瀏覽這些數(shù)據(jù)的界面。

集群層面日志: 集群層面日志 機(jī)制負(fù)責(zé)將容器的日志數(shù)據(jù) 保存到一個(gè)集中的日志存儲(chǔ)中,該存儲(chǔ)能夠提供搜索和瀏覽接口。

API

Kubernetes 控制面 的核心是 API 服務(wù)器。 API 服務(wù)器負(fù)責(zé)提供 HTTP API,以供用戶、集群中的不同部分和集群外部組件相互通信。

對(duì)象

Kubernetes對(duì)象是Kubernetes系統(tǒng)中的持久實(shí)體。Kubernetes使用這些實(shí)體來表示集群的狀態(tài).

具體來說,他們可以描述:

容器化應(yīng)用正在運(yùn)行(以及在哪些節(jié)點(diǎn)上)

這些應(yīng)用可用的資源

關(guān)于這些應(yīng)用如何運(yùn)行的策略,如重新策略,升級(jí)和容錯(cuò)

Kubernetes 架構(gòu)

Kubernetes 架構(gòu)由節(jié)點(diǎn),控制面到節(jié)點(diǎn)通信, 控制器, 云控制器管理器組成.

master 流程圖

Kubecfg將特定的請(qǐng)求,比如創(chuàng)建Pod,發(fā)送給Kubernetes Client。

Kubernetes Client將請(qǐng)求發(fā)送給API server。

API Server根據(jù)請(qǐng)求的類型,比如創(chuàng)建Pod時(shí)storage類型是pods,然后依此選擇何種REST Storage API對(duì)請(qǐng)求作出處理。

REST Storage API對(duì)的請(qǐng)求作相應(yīng)的處理。

將處理的結(jié)果存入高可用鍵值存儲(chǔ)系統(tǒng)Etcd中。

在API Server響應(yīng)Kubecfg的請(qǐng)求后,Scheduler會(huì)根據(jù)Kubernetes Client獲取集群中運(yùn)行Pod及Minion/Node信息。

依據(jù)從Kubernetes Client獲取的信息,Scheduler將未分發(fā)的Pod分發(fā)到可用的Minion/Node節(jié)點(diǎn)上。

節(jié)點(diǎn)

節(jié)點(diǎn)可以是一個(gè)虛擬機(jī)或者物理機(jī)器,取決于所在的集群配置。 每個(gè)節(jié)點(diǎn)包含運(yùn)行 Pods 所需的服務(wù), 這些 Pods 由 控制面 負(fù)責(zé)管理.

節(jié)點(diǎn)上的組件包括 kubelet、 容器運(yùn)行時(shí)以及 kube-proxy。

節(jié)點(diǎn)狀態(tài)

可以使用 kubectl 來查看節(jié)點(diǎn)狀態(tài)和其他細(xì)節(jié)信息:

kubectl describe node ?節(jié)點(diǎn)名稱

一個(gè)節(jié)點(diǎn)包含以下信息:

地址

HostName:由節(jié)點(diǎn)的內(nèi)核設(shè)置。可以通過 kubelet 的 —hostname-override 參數(shù)覆蓋。

ExternalIP:通常是節(jié)點(diǎn)的可外部路由(從集群外可訪問)的 IP 地址。

InternalIP:通常是節(jié)點(diǎn)的僅可在集群內(nèi)部路由的 IP 地址。

狀況(conditions 字段描述了所有 Running 節(jié)點(diǎn)的狀態(tài))

Ready 如節(jié)點(diǎn)是健康的并已經(jīng)準(zhǔn)備好接收 Pod 則為 True;False 表示節(jié)點(diǎn)不健康而且不能接收 Pod;Unknown 表示節(jié)點(diǎn)控制器在最近 node-monitor-grace-period 期間(默認(rèn) 40 秒)沒有收到節(jié)點(diǎn)的消息

DiskPressure為True則表示節(jié)點(diǎn)的空閑空間不足以用于添加新 Pod, 否則為 False

MemoryPressure為True則表示節(jié)點(diǎn)存在內(nèi)存壓力,即節(jié)點(diǎn)內(nèi)存可用量低,否則為 False

PIDPressure為True則表示節(jié)點(diǎn)存在進(jìn)程壓力,即節(jié)點(diǎn)上進(jìn)程過多;否則為 False

NetworkUnavailable為True則表示節(jié)點(diǎn)網(wǎng)絡(luò)配置不正確;否則為 False

容量與可分配描述節(jié)點(diǎn)上的可用資源:CPU、內(nèi)存和可以調(diào)度到節(jié)點(diǎn)上的 Pod 的個(gè)數(shù)上限。

信息關(guān)于節(jié)點(diǎn)的一般性信息,例如內(nèi)核版本、Kubernetes 版本(kubelet 和 kube-proxy 版本)、 Docker 版本(如果使用了)和操作系統(tǒng)名稱。這些信息由 kubelet 從節(jié)點(diǎn)上搜集而來。

控制面到節(jié)點(diǎn)通信

節(jié)點(diǎn)到控制面

apiserver在安全的 HTTPS 端口(443)上監(jiān)聽遠(yuǎn)程連接請(qǐng)求

以客戶端證書的形式將客戶端憑據(jù)提供給 kubelet

控制面到節(jié)點(diǎn)

API 服務(wù)器到 kubelet連接用于

獲取 Pod 日志

掛接(通過 kubectl)到運(yùn)行中的 Pod

提供 kubelet 的端口轉(zhuǎn)發(fā)功能。

(注: 在連接狀態(tài)下, 默認(rèn)apiserver 不檢查 kubelet 的服務(wù)證書。容易受到中間人攻擊,不安全.)

apiserver 到節(jié)點(diǎn)、Pod 和服務(wù)

SSH 隧道(目前已經(jīng)廢棄)

產(chǎn)生原因: 若無服務(wù)證書, 又要求避免在非受信網(wǎng)絡(luò)或公共網(wǎng)絡(luò)上進(jìn)行連接,則可以在apiserver 和 kubelet 之間使用ssh隧道.

Kubernetes 支持使用 SSH 隧道來保護(hù)從控制面到節(jié)點(diǎn)的通信路徑。

Konnectivity 服務(wù)為ssh隧道的替代品, Konnectivity 服務(wù)提供 TCP 層的代理,以便支持從控制面到集群的通信。

控制器

在 Kubernetes 中,控制器通過監(jiān)控集群 的公共狀態(tài),并致力于將當(dāng)前狀態(tài)轉(zhuǎn)變?yōu)槠谕臓顟B(tài)。

舉個(gè)例子: 當(dāng)前室內(nèi)溫度為20度, 我們通過調(diào)節(jié)遙控器,使其溫度上升至24度, 這20度到24度的變化即為讓其從當(dāng)前狀態(tài)接近期望狀態(tài)。

控制器模式分為直接控制和通過API服務(wù)器來控制.

云控制器管理器

云控制器管理器是指嵌入特定云的控制邏輯的 控制平面組件。 云控制器管理器允許您鏈接聚合到云提供商的應(yīng)用編程接口中, 并分離出相互作用的組件與您的集群交互的組件。

云控制器管理器中的控制器包括:

節(jié)點(diǎn)控制器

節(jié)點(diǎn)控制器負(fù)責(zé)在云基礎(chǔ)設(shè)施中創(chuàng)建了新服務(wù)器時(shí)為之 創(chuàng)建 節(jié)點(diǎn)(Node)對(duì)象。 節(jié)點(diǎn)控制器從云提供商獲取當(dāng)前租戶中主機(jī)的信息。

執(zhí)行功能:

針對(duì)控制器通過云平臺(tái)驅(qū)動(dòng)的 API 所發(fā)現(xiàn)的每個(gè)服務(wù)器初始化一個(gè) Node 對(duì)象

利用特定云平臺(tái)的信息為 Node 對(duì)象添加注解和標(biāo)簽

獲取節(jié)點(diǎn)的網(wǎng)絡(luò)地址和主機(jī)名

檢查節(jié)點(diǎn)的健康狀況。

路由控制器Route 控制器負(fù)責(zé)適當(dāng)?shù)嘏渲迷破脚_(tái)中的路由,以便 Kubernetes 集群中不同節(jié)點(diǎn)上的 容器之間可以相互通信。

服務(wù)控制器服務(wù)(Service)與受控的負(fù)載均衡器、 IP 地址、網(wǎng)絡(luò)包過濾、目標(biāo)健康檢查等云基礎(chǔ)設(shè)施組件集成。 服務(wù)控制器與云驅(qū)動(dòng)的 API 交互,以配置負(fù)載均衡器和其他基礎(chǔ)設(shè)施組件。

Kubernetes 安全性

云原生安全

云原生安全4個(gè)C: 云(Cloud)、集群(Cluster)、容器(Container)和代碼(Code)

云原生安全模型的每一層都是基于下一個(gè)最外層,代碼層受益于強(qiáng)大的基礎(chǔ)安全層(云、集群、容器)。我們無法通過在代碼層解決安全問題來為基礎(chǔ)層中糟糕的安全標(biāo)準(zhǔn)提供保護(hù)。

基礎(chǔ)設(shè)施安全

Kubetnetes 基礎(chǔ)架構(gòu)關(guān)注領(lǐng)域

建議

通過網(wǎng)絡(luò)訪問 API 服務(wù)(控制平面)

所有對(duì) Kubernetes 控制平面的訪問不允許在 Internet 上公開,同時(shí)應(yīng)由網(wǎng)絡(luò)訪問控制列表控制,該列表包含管理集群所需的 IP 地址集。

通過網(wǎng)絡(luò)訪問 Node(節(jié)點(diǎn))

節(jié)點(diǎn)應(yīng)配置為 僅能 從控制平面上通過指定端口來接受(通過網(wǎng)絡(luò)訪問控制列表)連接,以及接受 NodePort 和 LoadBalancer 類型的 Kubernetes 服務(wù)連接。如果可能的話,這些節(jié)點(diǎn)不應(yīng)完全暴露在公共互聯(lián)網(wǎng)上。

Kubernetes 云訪問提供商的 API

每個(gè)云提供商都需要向 Kubernetes 控制平面和節(jié)點(diǎn)授予不同的權(quán)限集。為集群提供云提供商訪問權(quán)限時(shí),最好遵循對(duì)需要管理的資源的最小特權(quán)原則。Kops 文檔提供有關(guān) IAM 策略和角色的信息。

訪問 etcd

對(duì) etcd(Kubernetes 的數(shù)據(jù)存儲(chǔ))的訪問應(yīng)僅限于控制平面。根據(jù)配置情況,你應(yīng)該嘗試通過 TLS 來使用 etcd。更多信息可以在 etcd 文檔中找到。

etcd 加密

在所有可能的情況下,最好對(duì)所有驅(qū)動(dòng)器進(jìn)行靜態(tài)數(shù)據(jù)加密,但是由于 etcd 擁有整個(gè)集群的狀態(tài)(包括機(jī)密信息),因此其磁盤更應(yīng)該進(jìn)行靜態(tài)數(shù)據(jù)加密。

集群組件安全

運(yùn)行的應(yīng)用程序的安全性關(guān)注領(lǐng)域

訪問控制授權(quán)(訪問 Kubernetes API)

認(rèn)證方式

應(yīng)用程序 Secret 管理 (并在 etcd 中對(duì)其進(jìn)行靜態(tài)數(shù)據(jù)加密)

Pod 安全策略

服務(wù)質(zhì)量(和集群資源管理)

網(wǎng)絡(luò)策略

Kubernetes Ingress 的 TLS 支持

容器安全

容器安全性關(guān)注領(lǐng)域

容器搭建配置(配置不當(dāng),危險(xiǎn)掛載, 特權(quán)用戶)

容器服務(wù)自身缺陷

Linux內(nèi)核漏洞

鏡像簽名和執(zhí)行

代碼安全

代碼安全關(guān)注領(lǐng)域

僅通過 TLS 訪問(流量加密)

限制通信端口范圍

第三方依賴性安全

靜態(tài)代碼分析

動(dòng)態(tài)探測(cè)攻擊(黑盒)

Kubernetes架構(gòu)常見問題

Kubernetes ATTACK 矩陣

信息泄露

云賬號(hào)AK泄露

API憑證(即阿里云AccessKey)是用戶訪問內(nèi)部資源最重要的身份憑證。用戶調(diào)用API時(shí)的通信加密和身份認(rèn)證會(huì)使用API憑證.

API憑證是云上用戶調(diào)用云服務(wù)API、訪問云上資源的唯一身份憑證。

API憑證相當(dāng)于登錄密碼,用于程序方式調(diào)用云服務(wù)API.

k8s configfile泄露

kubeconfig文件所在的位置:

$HOME/.kube/config

Kubeconfig文件包含有關(guān)Kubernetes集群的詳細(xì)信息,包括它們的位置和憑據(jù)。

云廠商會(huì)給用戶提供該文件,以便于用戶可以通過kubectl對(duì)集群進(jìn)行管理. 如果攻擊者能夠訪問到此文件(如辦公網(wǎng)員工機(jī)器入侵、泄露到Github的代碼等),就可以直接通過API Server接管K8s集群,帶來風(fēng)險(xiǎn)隱患。

Master節(jié)點(diǎn)SSH登錄泄露

常見的容器集群管理方式是通過登錄Master節(jié)點(diǎn)或運(yùn)維跳板機(jī),然后再通過kubectl命令工具來控制k8s。

云服務(wù)器提供了通過ssh登陸的形式進(jìn)行登陸master節(jié)點(diǎn).

若Master節(jié)點(diǎn)SSH連接地址泄露,攻擊者可對(duì)ssh登陸進(jìn)行爆破,從而登陸上ssh,控制集群.

容器組件未鑒權(quán)服務(wù)

Kubernetes架構(gòu)下常見的開放服務(wù)指紋如下:

kube-apiserver: 6443, 8080

kubectl proxy: 8080, 8081

kubelet: 10250, 10255, 4149

dashboard: 30000

docker api: 2375

etcd: 2379, 2380

kube-controller-manager: 10252

kube-proxy: 10256, 31442

kube-scheduler: 10251

weave: 6781, 6782, 6783

kubeflow-dashboard: 8080

注:前六個(gè)重點(diǎn)關(guān)注: 一旦被控制可以直接獲取相應(yīng)容器、相應(yīng)節(jié)點(diǎn)、集群權(quán)限的服務(wù)

了解各個(gè)組件被攻擊時(shí)所造成的影響

組件分工圖:

假如用戶想在集群里面新建一個(gè)容器集合單元, 流程如下:

用戶與 kubectl進(jìn)行交互,提出需求(例: kubectl create -f pod.yaml)

kubectl 會(huì)讀取 ~/.kube/config 配置,并與 apiserver 進(jìn)行交互,協(xié)議:http/https

apiserver 會(huì)協(xié)同 ETCD, kube-controller-manager, scheduler 等組件準(zhǔn)備下發(fā)新建容器的配置給到節(jié)點(diǎn),協(xié)議:http/https

apiserver 與 kubelet 進(jìn)行交互,告知其容器創(chuàng)建的需求,協(xié)議:http/https;

kubelet 與Docker等容器引擎進(jìn)行交互,創(chuàng)建容器,協(xié)議:http/unix socket.

容器已然在集群節(jié)點(diǎn)上創(chuàng)建成功

攻擊apiserver

apiserver介紹:

在Kubernetes中,對(duì)于未鑒權(quán)對(duì)apiserver, 能訪問到 apiserver 一般情況下就能獲取了集群的權(quán)限.

在攻擊者眼中Kubernetes APIServer

容器編排K8S總控組件

pods, services, secrets, serviceaccounts, bindings, componentstatuses, configmaps,

endpoints, events, limitranges, namespaces, nodes, persistentvolumeclaims,

persistentvolumes, podtemplates, replicationcontrollers, resourcequotas …

可控以上所有k8s資源

可獲取幾乎所有容器的交互式shell

利用一定技巧可獲取所有容器母機(jī)的交互式shell

默認(rèn)情況下apiserver都有鑒權(quán):

未鑒權(quán)配置如下:

對(duì)于這類的未鑒權(quán)的設(shè)置來說,訪問到 apiserver 一般情況下就獲取了集群的權(quán)限:

如何通過apiserver來進(jìn)行滲透,可參考:

攻擊kubelet

每一個(gè)Node節(jié)點(diǎn)都有一個(gè)kubelet(每個(gè)節(jié)點(diǎn)上運(yùn)行的代理)服務(wù),kubelet監(jiān)聽了10250,10248,10255等端口。

10250端口,是kubelet與apiserver進(jìn)行通信對(duì)主要端口, 通過該端口,kubelet可以知道當(dāng)前應(yīng)該處理的任務(wù).該端口在最新版Kubernetes是有鑒權(quán)的, 但在開啟了接受匿名請(qǐng)求的情況下,不帶鑒權(quán)信息的請(qǐng)求也可以使用10250提供的能力, 在Kubernetes早期,很多挖礦木馬基于該端口進(jìn)行傳播.

在配置文件中,若進(jìn)行如下配置,則可能存在未授權(quán)訪問漏洞.

/var/bin/kubulet/config/yaml

若10250端口存在未授權(quán)訪問漏洞,我們可以直接訪問/pods進(jìn)行查看

根據(jù)在pods中獲取的信息,我們可以在容器中執(zhí)行命令

curl -Gks {namespace}/{podname}/{containername} \-d 'input=1' -d 'output=1' -d 'tty=1' \-d 'command=whoami'

上述命令得到websocket地址,連接websocket得到命令結(jié)果:

使用wscat工具連接websocket

wscat -c “{websocket}” --no-check

即可得到我們執(zhí)行命令的結(jié)果.

獲取token

/var/run/secrets/kubernetes.io/serviceaccount

然后即可訪問kube-api server,獲取集群權(quán)限

curl -ks -H "Authorization: Bearer \ ttps://master:6443/api/v1/namespaces/{namespace}/secrets

"

攻擊kubelet總體步驟如下:

訪問pods獲取信息

獲取namespace、podsname、containername

執(zhí)行exec獲取token

/var/run/secrets/kubernetes.io/serviceaccount

利用Token訪問API Server進(jìn)行對(duì)pods操作。

攻擊dashboard

dashboard登陸鏈接如下:

dashboard界面如下:

dashboard是Kubernetes官方推出的控制Kubernetes的圖形化界面.在Kubernetes配置不當(dāng)導(dǎo)致dashboard未授權(quán)訪問漏洞的情況下,通過dashboard我們可以控制整個(gè)集群。

默認(rèn)情況下, dashboard是需要進(jìn)行鑒權(quán)操作的,當(dāng)用戶開啟了enable-skip-login時(shí)可以在登錄界面點(diǎn)擊Skip跳過登錄進(jìn)入dashboard.

通過skip登陸的dashboard默認(rèn)是沒有操作集群的權(quán)限,因?yàn)镵ubernetes使用RBAC(Role-based access control)機(jī)制進(jìn)行身份認(rèn)證和權(quán)限管理,不同的serviceaccount擁有不同的集群權(quán)限。

但有些開發(fā)者為了方便或者在測(cè)試環(huán)境中會(huì)為Kubernetes-dashboard綁定cluster-admin這個(gè)ClusterRole(cluster-admin擁有管理集群的最高權(quán)限).

為Kubernetes-dashboard綁定cluster-admin 設(shè)置如下:

新建dashboard-admin.yaml內(nèi)容

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: kubernetes-dashboardroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects : kind: ServiceAccount name: kubernetes-dashboard namespace: kubernetes-dashboard

kubectl create -f dashboard-admin.yaml

后通過skip登陸dashboard便有了管理集群的權(quán)限.

創(chuàng)建Pod控制node節(jié)點(diǎn),該pod主要是將宿主機(jī)根目錄掛載到容器tmp目錄下。

新建一個(gè)Pod如下:

通過該容器的tmp目錄管理node節(jié)點(diǎn)的文件

攻擊etcd

Kubernetes默認(rèn)使用了etcd v3來存儲(chǔ)數(shù)據(jù), 若能na

etcd對(duì)內(nèi)暴露2379端口,本地127.0.0.1可免認(rèn)證訪問. 其他地址要帶—endpoint參數(shù)和cert進(jìn)行認(rèn)證。

未授權(quán)訪問流程:

檢查是否正常鏈接

etcdctl endpoint health

讀取service account token

etcdctl get / --prefix --keys-only | grep /secrets/kube-system/clusterrole

通過token認(rèn)訪問API-Server端口6443,接管集群:

kubectl --insecure-skip-tls-verify -s --token="[ey...]" -n kube-system get pods

攻擊docker remote api(Docker daemon公網(wǎng)暴露)

2375是docker遠(yuǎn)程操控的默認(rèn)端口,通過這個(gè)端口可以直接對(duì)遠(yuǎn)程的docker 守護(hù)進(jìn)程進(jìn)行操作。Docker 守護(hù)進(jìn)程默認(rèn)監(jiān)聽2375端口且未鑒權(quán).

當(dāng)機(jī)器以方式啟動(dòng)daemon時(shí),可以在外部機(jī)器對(duì)該機(jī)器的docker daemon進(jìn)行直接操作:

docker daemon -H=0.0.0.0:2375

之后依次執(zhí)行systemctl daemon-reload、systemctl restart docker

外部主機(jī)使用 即可操作暴露2375端口的主機(jī).

-H

因此當(dāng)你有訪問到目標(biāo)Docker API 的網(wǎng)絡(luò)能力或主機(jī)能力的時(shí)候,你就擁有了控制當(dāng)前服務(wù)器的能力。我們可以利用Docker API在遠(yuǎn)程主機(jī)上創(chuàng)建一個(gè)特權(quán)容器,并且掛載主機(jī)根目錄到容器.

檢測(cè)目標(biāo)是否存在docker api未授權(quán)訪問漏洞的方式也很簡(jiǎn)單,訪問http://[host]:[port]/info路徑是否含有ContainersRunning、DockerRootDir等關(guān)鍵字。

攻擊kubectl proxy

二次開發(fā)所產(chǎn)生的問題

管理Kubernetes無論是使用 kubectl 或 Kubernetes dashboard 的UI功能,其實(shí)都是間接在和 APIServer 做交互.

如果有需求對(duì)k8s進(jìn)行二次開發(fā)的話,大部分的開發(fā)功能請(qǐng)求了 APIServer 的 Rest API 從而使功能實(shí)現(xiàn)的。

例如:

給用戶銷毀自己POD的能力

DELETE

類似于這樣去調(diào)用apiserver, 攻擊者若修改namespace、pod和容器名, 那么即可造成越權(quán).

推薦工具

Kube-Hunter掃描漏洞

kube-hunter是一款用于尋找Kubernetes集群中的安全漏洞掃描器

下載地址:

CDK(強(qiáng)推)

CDK是一款為容器環(huán)境定制的滲透測(cè)試工具,在已攻陷的容器內(nèi)部提供零依賴的常用命令及PoC/EXP。集成Docker/K8s場(chǎng)景特有的 逃逸、橫向移動(dòng)、持久化利用方式,插件化管理。

下載地址:

參考鏈接

運(yùn)維工程師需要什么技術(shù)

運(yùn)維工程師需要 熟悉各種網(wǎng)絡(luò)協(xié)議、要理解各種系統(tǒng)服務(wù)、會(huì)各種網(wǎng)絡(luò)編程、各個(gè)廠商的設(shè)備,各種備份和還原的辦法等。it運(yùn)維找賢牛。下載賢牛APP可幫您解決it運(yùn)維難題。在賢牛不僅可以得到專業(yè)IT運(yùn)維工程師提供解決方案,還可以提供所需備件進(jìn)行高效配送。 賢牛APP為您提供服務(wù):1.用戶可以根據(jù)自身需求靈活挑選運(yùn)維方式(單次、合同、框架協(xié)議等),滿足臨時(shí)性任務(wù)帶來的大量系統(tǒng)部署與變更需求所要求的資源,有效避免高額維保費(fèi)用與故障之間過低的性價(jià)比,可使企業(yè)專注自身業(yè)務(wù),降低維保成本。 2.賢牛作為一個(gè)共享工程師平臺(tái),推出搶單功能,對(duì)接具有運(yùn)維需求的企業(yè),將企業(yè)資源下沉到搶單平臺(tái),打破公司壟斷優(yōu)質(zhì)資源的局面。 5.MDT-協(xié)調(diào)在線召集不同領(lǐng)域的專家共同診斷,與現(xiàn)場(chǎng)工程師遠(yuǎn)程協(xié)作完成故障的處理,降低成本,提高效率,比較重要的是可以享用全國各地的專家服務(wù),打破傳統(tǒng)服務(wù)模式地域的限制。 4.在賢牛不必為買不到備件而困擾。賢牛擁有品類超過8000+種的備件商城,價(jià)格透明,優(yōu)質(zhì)低價(jià),全國六大倉庫高效配送,同城比較快3小時(shí)送達(dá)和異地比較快24小時(shí)送達(dá)(偏遠(yuǎn)地區(qū)視情況而定)。 5.通過賢牛認(rèn)證的運(yùn)維工程師,個(gè)人信息是被嚴(yán)格保密的,平臺(tái)會(huì)提供隱號(hào)通話,工程師可以盡情發(fā)揮自己的才能。同時(shí),賢牛已經(jīng)與保險(xiǎn)公司達(dá)成合作,開通服務(wù)責(zé)任險(xiǎn)。 6.工程師接單時(shí)能夠清楚地看到工單金額、對(duì)應(yīng)的工作內(nèi)容和服務(wù)時(shí)間,可自主選擇接單。

運(yùn)維需要學(xué)什么

運(yùn)維工程師一般有系統(tǒng)運(yùn)維、網(wǎng)絡(luò)運(yùn)維、運(yùn)維開發(fā)、數(shù)據(jù)庫運(yùn)維、云運(yùn)維等方向,今天主要介紹系統(tǒng)運(yùn)維工程師所需要具備的一些技能和考證方面。

系統(tǒng)運(yùn)維工程師必備技能

系統(tǒng)運(yùn)維工程師不僅需要有Linux基本操作技能,還應(yīng)該會(huì)服務(wù)器硬件、以及企業(yè)里常用的雙機(jī)集群、Windows、VMware、數(shù)據(jù)庫等技能,這樣才能有擔(dān)任合格的系統(tǒng)運(yùn)維工程師。

需要特別注意企業(yè)里物理機(jī)都是用雙機(jī)集群,一定要掌握雙機(jī)集群的技能,包括Linux雙機(jī)集群、Windows雙機(jī)集群、Oracle Rac數(shù)據(jù)庫集群、SQL Server數(shù)據(jù)庫集群等。

kubernetes 是什么語言開發(fā)的

kubernetes是go語言寫的,他里面有一些restful?api接口,是開源容器應(yīng)用自動(dòng)化部署技術(shù),也就是大家經(jīng)常說的k8s。

kubernetes(k8s)是自動(dòng)化容器操作的開源平臺(tái),這些操作包括部署,調(diào)度和節(jié)點(diǎn)集群間擴(kuò)展。如果你曾經(jīng)用過Docker容器技術(shù)部署容器,那么可以將Docker看成Kubernetes內(nèi)部使用的低級(jí)別組件。Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術(shù)。

使用Kubernetes可以:

自動(dòng)化容器的部署和復(fù)制

隨時(shí)擴(kuò)展或收縮容器規(guī)模

將容器組織成組,并且提供容器間的負(fù)載均衡

很容易地升級(jí)應(yīng)用程序容器的新版本

提供容器彈性,如果容器失效就替換它,等等...

K8s學(xué)習(xí)有一個(gè)前提條件,需要先掌握docker,如果你沒有docker基礎(chǔ)的話,那還不能學(xué)習(xí) K8s k8s它底層的部署容器的那么容器本來就是docker。

可以看看這個(gè)視頻教程,還是非常認(rèn)真仔細(xì)的!

運(yùn)維工程師需要掌握什么技能?

運(yùn)維工程師需要掌握的技能:

1、首先是主機(jī)、網(wǎng)絡(luò)及操作系統(tǒng)基本知識(shí)。在出現(xiàn)問題時(shí),懂得在各個(gè)網(wǎng)絡(luò)位置抓包,來確認(rèn)故障設(shè)備或線路,會(huì)使用Linux的tcpdump抓包或者ethreal、sniffer、Wireshark等抓包軟件,會(huì)在網(wǎng)絡(luò)設(shè)備上配置鏡像,將關(guān)心的流量抓出來進(jìn)行分析。

2、懂開發(fā),能實(shí)現(xiàn)自動(dòng)化運(yùn)維。比如使用Shell、Python、Perl等腳本語言做一些自動(dòng)化運(yùn)行腳本、診斷故障的腳本,使用這些腳本可以提升工作效率,將重復(fù)性的簡(jiǎn)單工作交給腳本程序處理,也可以通過這些腳本判斷故障發(fā)生的位置和原因,高效的運(yùn)維將不再需要人工去逐個(gè)字符地去輸入各種命令。

3、未來云計(jì)算與大數(shù)據(jù)勢(shì)必成為整個(gè)互聯(lián)網(wǎng)行業(yè)的支撐。所有云計(jì)算運(yùn)維工程師以及大數(shù)據(jù)工程師的作用就越來與明顯,同時(shí)云計(jì)算以及大數(shù)據(jù)相關(guān)高端人才的需求量也會(huì)越來越大。

當(dāng)前文章:go語言k8s二次開發(fā) go 并發(fā)編程第二版
轉(zhuǎn)載來源:http://chinadenli.net/article8/doddcip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化定制開發(fā)App設(shè)計(jì)虛擬主機(jī)App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化