網(wǎng)絡(luò)策略負(fù)責(zé)限制出流量舒憾,Pod 安全策略負(fù)責(zé) Pod 內(nèi)限制系統(tǒng)的訪問權(quán)限
1 網(wǎng)絡(luò)策略
NetworkPolicy 的示例:
① ingress 入規(guī)則:允許以下 Pod 連接到 default
名字空間下的帶有 role=db 標(biāo)簽的所有 Pod
的 6379 TCP 端口
② egress 出規(guī)則:允許名字空間 default
中所有自帶標(biāo)簽 role=db 的 Pod
使用 TCP 協(xié)議 與 10.0.0.0/24 范圍內(nèi)的 IP 通信,只要目標(biāo)端口介于 32000 和 32768 之間就可以克胳。
piVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
# IP 地址范圍為 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255 (即德挣,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)
- ipBlock:
# CIDR 表示范圍
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
# 帶有 project=myproject 標(biāo)簽的所有名字空間中的 Pod
- namespaceSelector:
matchLabels:
project: myproject
# default 名字空間下帶有 role=frontend 標(biāo)簽的所有 Pod
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 32000
endport: 32768
默認(rèn)拒絕所有出站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
spec:
podSelector: {}
policyTypes:
- Egress
2 Pod 安全策略
Pod 安全性標(biāo)準(zhǔn)定義了三種不同的策略恭垦。
Profile | 作用 |
---|---|
Privileged | 有目的地開放且完全無限制的策略。通常針對由特權(quán)較高格嗅、受信任的用戶所管理的系統(tǒng)級或基礎(chǔ)設(shè)施級負(fù)載 |
Baseline | 便于常見的容器化應(yīng)用采用番挺,同時禁止已知的特權(quán)提升。針對的是應(yīng)用運維人員和非關(guān)鍵性應(yīng)用的開發(fā)人員 |
Restricted | 旨在實施當(dāng)前保護 Pod 的最佳實踐屯掖。針對運維人員和安全性很重要的應(yīng)用的開發(fā)人員玄柏,以及不太被信任的用戶 |
restricted 安全策略 模板如下:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted-security-policy
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'runtime/default'
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
spec:
privileged: false # Don't allow privileged pods!
# 不允許升級到 root 權(quán)限
allowPrivilegeEscalation: false
# 這與 allowPrivilegeEscalation 是多余的
# 必須從容器中去除的權(quán)能字。 所給的權(quán)能字會從默認(rèn)權(quán)能字集合中去除贴铜,并且一定不可以添加
requiredDropCapabilities:
- ALL
# 允許的 volume 類型.
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
# Assume that persistentVolumes set up by the cluster admin are safe to use.
- 'persistentVolumeClaim'
# 控制是否 Pod 可以使用節(jié)點的網(wǎng)絡(luò)名字空間粪摘。 此類授權(quán)將允許 Pod 訪問本地回路(loopback)設(shè)備、在本地主機(localhost) 上監(jiān)聽的服務(wù)绍坝、還可能用來監(jiān)聽同一節(jié)點上其他 Pod 的網(wǎng)絡(luò)活動徘意。
hostNetwork: false
# 控制 Pod 容器是否可共享宿主上的 IPC 名字空間
hostIPC: false
# 控制 Pod 中容器是否可以共享宿主上的進程 ID 空間
hostPID: false
runAsUser:
# 允許在非 root 權(quán)限在運行 container
rule: 'MustRunAsNonRoot'
# 設(shè)置容器的 SELinux 上下文
seLinux:
rule: 'RunAsAny'
# 控制容器可以添加的組 ID
supplementalGroups:
# 要求至少指定一個 range 值。 第一個 range 中的最小值用作默認(rèn)值轩褐。 所有 range 值都被用來執(zhí)行驗證檢查椎咧。
rule: 'MustRunAs'
ranges:
# 禁止添加到 root 組
- min: 1
max: 65535
# 控制應(yīng)用到某些卷上的附加用戶組
fsGroup:
rule: 'MustRunAs'
ranges:
# 禁止添加到 root 組
- min: 1
max: 65535
# 以只讀方式訪問根文件系統(tǒng)
readOnlyRootFilesystem: false