Kubernetes 内のセキュリティ構成
名前空間
このプロジェクトで提供されるコンポーネントのほとんどは、名前空間を知っている必要があります。Kubernetes (1.3+) の場合、名前空間はサービスアカウントシークレットの一部として pod で利用できるようになり、クライアントによって自動的に検出されます。以前のバージョンの場合は、環境変数として pod に指定する必要があります。これを簡単に行う方法は次のとおりです。
env:
- name: "KUBERNETES_NAMESPACE"
valueFrom:
fieldRef:
fieldPath: "metadata.namespace"サービスアカウント
クラスター内でよりきめ細かいロールベースのアクセスをサポートする Kubernetes のディストリビューションの場合、spring-cloud-kubernetes で実行される pod が Kubernetes API にアクセスできることを確認する必要があります。デプロイまたは pod に割り当てるサービスアカウントについては、それらのアカウントに正しいロールがあることを確認する必要があります。
要件に応じて、次のリソースに対する get、list、watch 権限が必要になります。
| 依存 | リソース |
|---|---|
spring-cloud-starter-kubernetes-fabric8 | pods、サービス、エンドポイント |
spring-cloud-starter-kubernetes-fabric8-config | 構成マップ、シークレット |
spring-cloud-starter-kubernetes-client | pods、サービス、エンドポイント |
spring-cloud-starter-kubernetes-client-config | 構成マップ、シークレット |
開発目的で、cluster-reader アクセス許可を default サービスアカウントに追加できます。本番システムでは、より詳細な権限を提供することが必要になる場合があります。
次のロールと RoleBinding は、default アカウントの名前空間アクセス許可の例です。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: YOUR-NAME-SPACE
name: namespace-reader
rules:
- apiGroups: [""]
resources: ["configmaps", "pods", "services", "endpoints", "secrets"]
verbs: ["get", "list", "watch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader-binding
namespace: YOUR-NAME-SPACE
subjects:
- kind: ServiceAccount
name: default
apiGroup: ""
roleRef:
kind: Role
name: namespace-reader
apiGroup: ""