網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全防護涉及訪問控制和流量加密。通過定義網(wǎng)絡(luò)策略,您可以限制服務(wù)之間的網(wǎng)絡(luò)訪問,只允許特定的流量通過。網(wǎng)絡(luò)策略涉及很多方面,例如默認允許或拒絕規(guī)則、命名空間隔離、安全組設(shè)置等。通過加密傳輸?shù)牧髁浚梢源_保敏感數(shù)據(jù)在傳輸過程中不被篡改或竊取。通過綜合使用以上技術(shù)和措施,您可以增強服務(wù)之間的安全性和保護敏感數(shù)據(jù)的傳輸。
網(wǎng)絡(luò)策略
在Kubernetes集群中,默認情況下允許所有Pod間的通信。在生產(chǎn)環(huán)境中這樣的默認配置是不安全的。Kubernetes網(wǎng)絡(luò)策略(Network Policy)為您提供了一種機制來限制Pod間的網(wǎng)絡(luò)流量(通常稱為東/西向流量)以及Pod和外部服務(wù)之間的網(wǎng)絡(luò)流量。Network Policy使用Pod Selectors和Labels標(biāo)簽標(biāo)識源和目的Pod,同時在策略中支持指定的IP地址、端口號和協(xié)議類型及組合。使用Terway容器網(wǎng)絡(luò)時,如果您希望在IP地址或者端口層面控制網(wǎng)絡(luò)流量,您可以為集群中特定應(yīng)用配置網(wǎng)絡(luò)策略。具體操作,請參見使用網(wǎng)絡(luò)策略Network Policy和Kubernetes Network Policy Recipes。
Network Policy只適用于Terway集群。當(dāng)集群節(jié)點數(shù)量較多(節(jié)點大于100),Network Policy的代理會給Kubernetes的管控帶來較大壓力,您可以通過優(yōu)化大規(guī)模集群Network Policy進行調(diào)整。具體操作,請參見優(yōu)化大規(guī)模Terway集群NetworkPolicy的擴展性。
創(chuàng)建默認拒絕策略
與RBAC
策略一樣,創(chuàng)建Network Policy
同樣應(yīng)遵循最小權(quán)限訪問原則。應(yīng)創(chuàng)建一個默認拒絕(Deny All)策略限制來自命名空間的所有入站和出站流量,或者使用Calico創(chuàng)建一個全局策略。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
創(chuàng)建允許DNS查詢的規(guī)則
設(shè)置了默認的Deny All規(guī)則,您就可以開始對其他規(guī)則進行分層,例如允許Pod查詢CoreDNS進行名稱解析的全局規(guī)則。
執(zhí)行以下命令,對命名空間添加標(biāo)簽。
kubectl label namespace kube-system name=kube-system
使用以下YAML示例創(chuàng)建Network Policy。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53
重要關(guān)于如何在Kubernetes Network Policy中配置Pod間的流量控制,請參見官方文檔。
限制應(yīng)用Pod的網(wǎng)絡(luò)流量
在以下應(yīng)用場景中,您可以通過部署Network Policy限制到指定應(yīng)用Pod的網(wǎng)絡(luò)流量。
僅允許指定的微服務(wù)訪問該應(yīng)用Pod服務(wù)。
僅允許指定應(yīng)用訪問該數(shù)據(jù)庫Pod。
執(zhí)行以下命令,創(chuàng)建一個包含
app-bookstore
和role=api
標(biāo)簽的應(yīng)用Pod示例。kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80
使用以下模板并執(zhí)行
kubectl apply -f
部署Network Policy限制。該限制表示只允許被包含
app-bookstore
標(biāo)簽的Pod的流量訪問。kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore
執(zhí)行以下命令,查看其它流量是否被攔截。
kubectl run test-$RANDOM --rm -i -t --image=alpine -- sh
預(yù)期輸出:
/ # wget -qO- --timeout=2 http://apiserver wget: download timed out
執(zhí)行以下命令,測試包含指定的
app-bookstore
標(biāo)簽的應(yīng)用Pod流量是否被放行。kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh
預(yù)期輸出:
/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
添加規(guī)則選擇性允許Namespaces/Pods間的流量
首先允許命名空間內(nèi)的Pod相互通信,然后添加自定義規(guī)則,進一步限制該命名空間內(nèi)的Pod和Pod間的通信。更多信息,請參見Kubernetes Network Policy Recipes。
對網(wǎng)絡(luò)流量數(shù)據(jù)進行分析監(jiān)控
阿里云VPC提供流日志功能,可以記錄VPC網(wǎng)絡(luò)中彈性網(wǎng)卡ENI(Elastic Network Interface)傳入和傳出的流量信息,幫助您檢查訪問控制規(guī)則、監(jiān)控網(wǎng)絡(luò)流量和排查網(wǎng)絡(luò)故障。通過分析這些信息可以查找VPC內(nèi)資源(包括Pod)之間的異常流量。更多信息,請參見流日志概述。
安全組
ACK使用安全組來約束控制面節(jié)點和節(jié)點之間的網(wǎng)絡(luò)流量。安全組還用于控制節(jié)點、其他VPC資源和外部IP地址之間的流量。創(chuàng)建ACK集群時,會默認自動為您分配一個安全組。該安全組允許集群內(nèi)部節(jié)點之間的訪問不受限制。出于安全考慮,您還可以繼續(xù)收斂安全組出、入規(guī)則,實現(xiàn)集群的最小化訪問規(guī)則。詳細信息,請參見集群安全組出、入規(guī)則推薦配置。
更多信息,請參見ECS安全組配置案例和配置安全組。
傳輸加密
阿里云服務(wù)網(wǎng)格 ASM(Service Mesh)
ASM可以幫助您實現(xiàn)服務(wù)之間的傳輸加密,除了服務(wù)之間的雙向TLS加密,也支持使用SDS(Envoy' s Secret Discovery Service)為服務(wù)網(wǎng)關(guān)提供HTTPS安全支持、證書動態(tài)加載,從而提升服務(wù)網(wǎng)關(guān)整體安全性。同時ASM支持配合阿里云應(yīng)用高可用服務(wù)AHAS對部署在服務(wù)網(wǎng)格內(nèi)的應(yīng)用進行流量控制,通過集成阿里云鏈路追蹤服務(wù)Tracing Analysis,為分布式應(yīng)用的開發(fā)者提供完整的調(diào)用鏈路還原、調(diào)用請求量統(tǒng)計、鏈路拓撲、應(yīng)用依賴分析等能力,可以幫助開發(fā)者快速分析和診斷分布式應(yīng)用架構(gòu)下的性能瓶頸,提升開發(fā)診斷效率。
通過Secret配置TLS證書實現(xiàn)HTTPS訪問
集群中通過Ingress暴露的服務(wù)需要開啟HTTPS訪問。具體操作,請參見通過Secret配置TLS證書實現(xiàn)HTTPS訪問。