Spring Cloud Kubernetes 構成サーバー
Spring Cloud Kubernetes Config Server は Spring Cloud Config サーバーに基づいており、Kubernetes 構成マップ (英語) およびシークレット (英語) の環境リポジトリを追加します。
このコンポーネントは完全にオプションです。ただし、Kubernetes で実行しているアプリケーションで、既存の環境リポジトリ (Git、SVN、Vault など) に保存されている構成を引き続き活用できるようになります。
デフォルトのイメージは Docker Hub (英語) にあります。これにより、コードやイメージを自分で構築しなくても、Kubernetes にデプロイされた構成サーバーを簡単に取得できます。ただし、構成サーバーの動作をカスタマイズする必要がある場合、またはイメージを自分で構築したい場合は、GitHub のソースコード (英語) から独自のイメージを簡単に構築し、それを使用できます。
構成
Kubernetes 環境リポジトリの有効化
Kubernetes 環境リポジトリを有効にするには、アクティブなプロファイルのリストに kubernetes
プロファイルが含まれている必要があります。他のプロファイルをアクティブにして、他の環境リポジトリ実装を使用することもできます。
構成マップとシークレット PropertySources
デフォルトでは、Config Map データのみがフェッチされます。Secret も有効にするには、spring.cloud.kubernetes.secrets.enableApi=true
を設定する必要があります。spring.cloud.kubernetes.config.enableApi=false
を設定することで、Config Map PropertySource
を無効にできます。
追加の名前空間からの構成マップとシークレットデータの取得
デフォルトでは、Kubernetes 環境リポジトリは、それがデプロイされている名前空間から構成マップとシークレットのみを取得します。他の名前空間からのデータを含める場合は、spring.cloud.kubernetes.configserver.config-map-namespaces
および / または spring.cloud.kubernetes.configserver.secrets-namespaces
を名前空間値のカンマ区切りリストに設定できます。
spring.cloud.kubernetes.configserver.config-map-namespaces および / または spring.cloud.kubernetes.configserver.secrets-namespaces を設定する場合、その名前空間から構成マップおよびシークレットデータを引き続き取得するには、構成サーバーがデプロイされている名前空間を含める必要があります。 |
Spring Vault の高度な機能の使用
Spring Cloud Config サーバーの [ より高度な Spring Vault 機能 ]( docs.spring.io/spring-cloud-config/reference/server/environment-repository/vault-backend.html ) の一部を使用するには、[spring-vault-core
]( mvnrepository.com/artifact/org.springframework.vault/spring-vault-core (英語) ) がクラスパス上になければなりません。デフォルトでは、Spring Cloud Kubernetes は 構成サーバーを Kubernetes にデプロイするための Docker イメージを生成できますが、クラスパスに spring-vault-core
は含まれません。構成サーバーで特定の機能を有効にするために spring-core-vault
が必要な場合は、Maven ビルドを実行するときに vault
Maven プロファイルを有効にして、独自のバージョンの Docker イメージをビルドできます。
例:
$ ../../mvnw clean install -Pvault
デプロイヤムル
以下は、基本的な構成サーバーを Kubernetes にデプロイするために使用できるサンプルデプロイ、サービスおよび権限構成です。
---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: Service
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver
spec:
ports:
- name: http
port: 8888
targetPort: 8888
selector:
app: spring-cloud-kubernetes-configserver
type: ClusterIP
- apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app: spring-cloud-kubernetes-configserver
name: spring-cloud-kubernetes-configserver:view
roleRef:
kind: Role
apiGroup: rbac.authorization.k8s.io
name: namespace-reader
subjects:
- kind: ServiceAccount
name: spring-cloud-kubernetes-configserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: namespace-reader
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["configmaps", "secrets"]
verbs: ["get", "list"]
- apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-kubernetes-configserver-deployment
spec:
selector:
matchLabels:
app: spring-cloud-kubernetes-configserver
template:
metadata:
labels:
app: spring-cloud-kubernetes-configserver
spec:
serviceAccount: spring-cloud-kubernetes-configserver
containers:
- name: spring-cloud-kubernetes-configserver
image: springcloud/spring-cloud-kubernetes-configserver
imagePullPolicy: IfNotPresent
env:
- name: SPRING_PROFILES_INCLUDE
value: "kubernetes"
readinessProbe:
httpGet:
port: 8888
path: /actuator/health/readiness
livenessProbe:
httpGet:
port: 8888
path: /actuator/health/liveness
ports:
- containerPort: 8888