Spring Cloud Kubernetes 構成サーバー
Spring Cloud Kubernetes Config Server は Spring Cloud Config サーバーに基づいており、Kubernetes 構成マップ (英語) およびシークレット (英語) の環境リポジトリを追加します。
このコンポーネントは完全にオプションです。ただし、Kubernetes で実行しているアプリケーションで、既存の環境リポジトリ (Git、SVN、Vault など) に保存されている構成を引き続き活用できるようになります。
GitHub のソースコード (英語) から Docker イメージを構築し、それを使用して Kubernetes にデプロイできます。
構成
Kubernetes 環境リポジトリの有効化
Kubernetes 環境リポジトリを有効にするには、アクティブなプロファイルのリストに kubernetes プロファイルが含まれている必要があります。他のプロファイルをアクティブにして、他の環境リポジトリ実装を使用することもできます。
構成マップとシークレット PropertySources
デフォルトでは、Config Map データのみがフェッチされます。Secret も有効にするには、spring.cloud.kubernetes.secrets.enabled=true を設定する必要があります。spring.cloud.kubernetes.config.enabled=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 の高度な機能を使用する
In order to use some of the more advanced Spring Vault features of the Spring Cloud Config サーバー , spring-vault-core (英語) must be on the classpath. By default, Spring Cloud Kubernetes can generate a Docker image for deploying Config Server to Kubernetes, but it does not include spring-vault-core in the classpath. If you need spring-vault-core to enable certain functionality in the Config Server you can build your own version of Docker image by enabling the vault Maven profile when running Maven build.
例:
$ ../../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