Kubernetes
  • 序言
  • 基礎入門
    • Kubernetes 簡介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架構原理
    • 設計理念
    • 核心組件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 資源對象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安裝
    • 單機部署
    • 特性開關
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加組件
      • Addon-manager
      • DNS
      • Dashboard
      • 監控
      • 日誌
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 準備部署環境
      • 安裝必要工具
      • 創建計算資源
      • 配置創建證書
      • 配置生成配置
      • 配置生成密鑰
      • 部署 Etcd 群集
      • 部署控制節點
      • 部署計算節點
      • 配置 Kubectl
      • 配置網絡路由
      • 部署 DNS 擴展
      • 煙霧測試
      • 刪除集群
  • 插件擴展
    • API 擴展
      • Aggregation
      • CustomResourceDefinition
    • 訪問控制
      • 認證
      • RBAC 授權
      • 准入控制
    • Scheduler 擴展
    • 網絡插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 運行時插件 CRI
      • CRI-tools
      • Frakti
    • 存儲插件
      • 容器存儲接口 CSI
      • FlexVolume
      • glusterfs
    • 網絡策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 擴展
    • Device 插件
  • 服務治理
    • 服務治理
      • 一般準則
      • 滾動升級
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安裝
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排錯
      • 社區
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 實踐案例
    • 實踐概覽
    • 資源控制
    • 集群高可用
    • 應用高可用
    • 調試
    • 端口映射
    • 端口轉發
    • 用戶管理
    • GPU
    • HugePage
    • 安全
    • 審計
    • 備份恢復
    • 證書輪換
    • 大規模集群
    • 大數據與機器學習
      • Spark
      • Tensorflow
    • Serverless
  • 排錯指南
    • 排錯概覽
    • 集群排錯
    • Pod 排錯
    • 網絡排錯
    • PV 排錯
      • AzureDisk
      • AzureFile
    • Windows 排錯
    • 雲平臺排錯
      • Azure
    • 排錯工具
  • 社區貢獻
    • 開發指南
    • 單元測試和集成測試
    • 社區貢獻
  • 附錄
    • 生態圈
    • 學習資源
    • 國內鏡像
    • 如何貢獻
    • 參考文檔
Powered by GitBook
On this page
  • RBAC
  • 開啓 RBAC
  • 訪問控制
  • 雙向 TLS
  • 實現原理
  • 最佳實踐
  • 參考文檔
  1. 服務治理
  2. Istio

安全管理

Previous流量管理Next策略管理

Last updated 1 year ago

Istio 提供了 RBAC 訪問控制、雙向 TLS 認證以及密鑰管理等安全管理功能。

RBAC

Istio Role-Based Access Control (RBAC) 提供了 namespace、service 以及 method 級別的訪問控制。其特性包括

  • 簡單易用:提供基於角色的語意

  • 支持認證:提供服務 - 服務和用戶 - 服務的認證

  • 靈活:提供角色和角色綁定的自定義屬性

開啓 RBAC

通過 RbacConfig 來啓用 RBAC,其中 mode 支持如下選項:

  • OFF: 停用 RBAC。

  • ON: 爲網格中的所有服務啓用 RBAC。

  • ON_WITH_INCLUSION: 只對 inclusion 字段中包含的命名空間和服務啓用 RBAC。

  • ON_WITH_EXCLUSION: 對網格內的所有服務啓用 RBAC,除 exclusion 字段中包含的命名空間和服務之外。

下面的例子爲 default 命名空間開啓 RBAC:

apiVersion: "config.istio.io/v1alpha2"
kind: RbacConfig
metadata:
  name: default
  namespace: istio-system
spec:
  mode: ON_WITH_INCLUSION
  inclusion:
    namespaces: ["default"]

訪問控制

Istio RBAC 提供了 ServiceRole 和 ServiceRoleBinding 兩種資源對象,並以 CustomResourceDefinition (CRD) 的方式管理。

  • ServiceRole 定義了一個可訪問特定資源(namespace 之內)的服務角色,並支持以前綴通配符和後綴通配符的形式匹配一組服務

  • ServiceRoleBinding 定義了賦予指定角色的綁定,即可以指定的角色和動作訪問服務

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: products-viewer
  namespace: default
spec:
  rules:
  - services: ["products.default.svc.cluster.local"]
    methods: ["GET", "HEAD"]

---
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: test-binding-products
  namespace: default
spec:
  subjects:
  - user: "service-account-a"
  - user: "istio-ingress-service-account"
    properties:
    - request.auth.claims[email]: "a@foo.com"
    roleRef:
    kind: ServiceRole
    name: "products-viewer"

雙向 TLS

雙向 TLS 爲服務間通信提供了 TLS 認證,並提供管理系統自動管理密鑰和證書的生成、分發、替換以及撤銷。

實現原理

Istio Auth 由三部分組成:

  • 身份(Identity):Istio 使用 Kubernetes service account 來識別服務的身份,格式爲 spiffe://<*domain*>/ns/<*namespace*>/sa/<*serviceaccount*>

  • 通信安全:端到端 TLS 通信通過服務器端和客戶端的 Envoy 容器完成

  • 證書管理:Istio CA (Certificate Authority) 負責爲每個 service account 生成 SPIFEE 密鑰和證書、分發到 Pod(通過 Secret Volume Mount 的形式)、定期輪轉(Rotate)以及必要時撤銷。對於 Kuberentes 之外的服務,CA 配合 Istio node agent 共同完成整個過程。

這樣,一個容器使用證書的流程爲

  • 首先,Istio CA 監聽 Kubernetes API,併爲 service account 生成 SPIFFE 密鑰及證書,再以 secret 形式存儲到 Kubernetes 中

  • 然後,Pod 創建時,Kubernetes API Server 將 secret 掛載到容器中

  • 最後,Pilot 生成一個訪問控制的配置,定義哪些 service account 可以訪問服務,並分發給 Envoy

  • 而當容器間通信時,Pod 雙方的 Envoy 就會基於訪問控制配置來作認證

最佳實踐

  • 爲不同團隊創建不同 namespace 分別管理

  • 將 Istio CA 運行在單獨的 namespace 中,並且僅授予管理員權限

參考文檔

Istio Security 文檔
Istio Role-Based Access Control (RBAC)
Istio 雙向 TLS 文檔
image-20180423202459184