k8s和istio安全
- 安全的三要素
- 機(jī)密性,授權(quán)用戶才可獲取信息
- 完整性,信息在輸入和傳輸過(guò)程中,不被非法授權(quán)澳骤、篡改破壞
- 可用性,用戶正常的使用不被拒絕
使用非root用戶運(yùn)行容器
- 在dockerfile中使用user命令切換成非root用戶
- 有的容器內(nèi)部和外部的root用戶是一個(gè)容易導(dǎo)致問(wèn)題
FROM ubuntu
RUN user add xx
USER xx
user namespace和rootless container
- user ns澜薄,依賴于user ns为肮,任何容器內(nèi)部用戶都會(huì)映射到宿主機(jī)的非root用戶,默認(rèn)不開(kāi)啟
- rootless container肤京,指容器運(yùn)行時(shí)以非root身份啟動(dòng)颊艳,在該配置下,即使容器被突破忘分,在主機(jī)層面獲得的用戶權(quán)限也是非root的棋枕,確保了安全
集群的安全通信
- k8s各個(gè)組件之間都通過(guò)安全進(jìn)行通信,tls雙向認(rèn)證等
控制面
- 認(rèn)證
- 授權(quán)
- 配額
kubelet權(quán)限管理
- kubelet可以對(duì)node和pod進(jìn)行修改妒峦,使用noderestriction插件重斑,可以限制kubelet的權(quán)限,防止kubelet獲取kubeconfig
存儲(chǔ)加密
- k8s提供EncryptionConfiguration來(lái)設(shè)置需要加密的對(duì)象和算法肯骇,加密后發(fā)送給etcd
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguation
resources:
- resources:
- secrets
providers:
- identity: {}
- aesgcm:
keys:
- name: key1
secret# k8s和istio安全
1. 安全的三要素
- 機(jī)密性窥浪,授權(quán)用戶才可獲取信息
- 完整性,信息在輸入和傳輸過(guò)程中笛丙,不被非法授權(quán)漾脂、篡改破壞
- 可用性,用戶正常的使用不被拒絕
### 使用非root用戶運(yùn)行容器
1. 在dockerfile中使用user命令切換成非root用戶
- 有的容器內(nèi)部和外部的root用戶是一個(gè)容易導(dǎo)致問(wèn)題
FROM ubuntu
RUN user add xx
USER xx
### user namespace和rootless container
1. user ns胚鸯,依賴于user ns骨稿,任何容器內(nèi)部用戶都會(huì)映射到宿主機(jī)的非root用戶,默認(rèn)不開(kāi)啟
2. rootless container,指容器運(yùn)行時(shí)以非root身份啟動(dòng)啊终,在該配置下镜豹,即使容器被突破傲须,在主機(jī)層面獲得的用戶權(quán)限也是非root的蓝牲,確保了安全
### 集群的安全通信
1. k8s各個(gè)組件之間都通過(guò)安全進(jìn)行通信,tls雙向認(rèn)證等
### 控制面
1. 認(rèn)證
2. 授權(quán)
3. 配額
### kubelet權(quán)限管理
1. kubelet可以對(duì)node和pod進(jìn)行修改泰讽,使用noderestriction插件例衍,可以限制kubelet的權(quán)限,防止kubelet獲取kubeconfig
### 存儲(chǔ)加密
1. k8s提供EncryptionConfiguration來(lái)設(shè)置需要加密的對(duì)象和算法已卸,加密后發(fā)送給etcd
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguation
resources:
- resources:
- secrets
providers: - identity: {}
- aesgcm:
keys:- name: key1
secret: xdkfs - name: key2
secret: xxdf
- name: key1
- aescbc:
keys:- name: key1
secret: xx
- name: key1
- secretbox:
keys:- name: k1
secret: x
- name: k1
- kms:
name: mykmsPlugin
endpoint: unix://xxx.sock
cachesize: 100
- secrets
### 實(shí)踐
#### security context
pod中定義的安全上下文佛玄,用來(lái)描述允許他請(qǐng)求訪問(wèn)某個(gè)節(jié)點(diǎn)上特定的linux用戶
1. container-level security context 對(duì)特定的容器使用
2. pod-levle security context 對(duì)pod內(nèi)所有容器應(yīng)用
- 會(huì)影響volume(包括fsGroup和selinuxOptions),fsgroup即為掛載得volume的屬組
3. pod security policies 集群內(nèi)部的所有pod和volume
- 一般情況下只會(huì)給管理員使用hostpath的權(quán)限
- 如果要使用psp需要開(kāi)啟api server的admission plugin累澡,先創(chuàng)建一個(gè)有全部權(quán)限的梦抢,給apiserver等,這種加上愧哟,不然apiserver會(huì)無(wú)法創(chuàng)建pod
- 然后創(chuàng)建有限制的
項(xiàng)目|解釋 |
---|---|
privileged| 運(yùn)行特權(quán)容器 |
defaultAddCapabilities | 添加 Capabilities |
requiredDropCapabilities | 刪除的Capabilities|
volumes | 控制容器可以訪問(wèn)哪些volumes|
hostNetwork | host網(wǎng)絡(luò)|
hostPorts | 允許host的port |
hostPID | 使用host pid namespace|
hostIPC | 使用host IPC namespace 是否可以跟主機(jī)的進(jìn)行進(jìn)行ipc通信 |
seLInux | 配置selinux|
runAsUser | userID |
supplementalGroups | |
fsGroup | volume 的group|
readOnlyRootFilesystem | 只讀根文件系統(tǒng)|
### taint
1. 一般推薦使用親和性和反親和性奥吩,使用污點(diǎn)進(jìn)行隔離,會(huì)導(dǎo)致資源使用率的降低
- 如果是高優(yōu)的pod蕊梧,想要占用cpu霞赫,可以使用–cpu-manager-policy=“static” 來(lái)綁定cpu
2. 增加taint kubectl taint nodes node1 key=value:noschedule
3. 刪除taint kubectl taint nodes node1 key:noschedule-
4. 設(shè)置容忍
- operator的值為Exists,這時(shí)無(wú)需指定value
- operator的值為Equal并且value相等
- NoSchedule: 如果一個(gè)pod沒(méi)有聲明容忍這個(gè)Taint肥矢,則系統(tǒng)不會(huì)把該P(yáng)od調(diào)度到有這個(gè)Taint的node上
- PreferNoSchedule:NoSchedule的軟限制版本端衰,如果一個(gè)Pod沒(méi)有聲明容忍這個(gè)Taint,則系統(tǒng)會(huì)盡量避免把這個(gè)pod調(diào)度到這一節(jié)點(diǎn)上去甘改,但不是強(qiáng)制的旅东。
- NoExecute:定義pod的驅(qū)逐行為,以應(yīng)對(duì)節(jié)點(diǎn)故障
5. 可以以租戶為粒度添加Taint十艾,節(jié)點(diǎn)彼此隔離抵代,防止別人的應(yīng)用出了漏洞,導(dǎo)致自己應(yīng)用暴露
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
tolerations:
- key: "key"
operator: "Exists"
effect: "NoSchedule"