Springboot-App can pulll the Configmap information.
Abstruct
KubernetesのPod上で動作するSpringBootアプリケーションからConfigMapを取得しに行くことができたので、その方法をまとめておきます。
Pod上にマウントされたConfigMapが更新されるのを待つのではなく、直接取得しに行く方法です。
追記:fabric8io/kubernetes-client を使用した方がConfigMapの変更イベントをトリガーにできるため、より簡単に実現できます。
参考:kubernetes-client/WatchExample.java at master · fabric8io/kubernetes-client
Environment
- minikube
- version
1 2
minikube version: v1.16.0 commit: 9f1e482427589ff8451c4723b6ba53bb9742fbb1
- docker
- version
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Client: Docker Engine - Community Cloud integration: 1.0.4 Version: 20.10.0 API version: 1.41 Go version: go1.13.15 Git commit: 7287ab3 Built: Tue Dec 8 18:55:43 2020 OS/Arch: darwin/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.0 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: eeddea2 Built: Tue Dec 8 18:58:04 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad0
環境構築は以下のコマンド。
|
|
eval $(minikube docker-env)
の必要性については、こちらのブログがわかりやすかったです。
What to create
- ConfigMap
- 読み取り対象のConfigMap
- 公式サイト(ConfigMap | Kubernetes)にあるサンプルを利用する。
- ServiceAccount
- Pod上からKubernetesのリソースにアクセスするためのアカウント。
- RoleBinding
- ServiceAccountに、Kubernetesのリソースにアクセスするための権限を付与するバインディング。
- 参考:RBAC認可を使用する | Kubernetes
- DockerImage
- SpringBootApplicationを配置/実行するイメージ
- Pod
- 作成したDockerImageを読み込むPod
- SpringBootApplication
- ConfigMapにアクセスするプログラム。
ConfigMap
game-demo-configmap.yaml
|
|
ConfigMapの作成方法は以下。
|
|
ServiceAccount
service-account.yaml
|
|
ServiceAccountの作成方法は以下。
|
|
RoleBinding
role-binding.yaml
|
|
Roleのデフォルトで用意されているもの(cluster-admin
やview
など)については、Using RBAC Authorization | Kubernetes を参照するとわかりやすいです。
RoleBindingの作成方法は以下。
|
|
DockerImage
|
|
DockerImageの作成方法は以下。
|
|
Pod
configmap-demo-pod.yaml
|
|
Podの作成方法は以下。
|
|
ServiceAccount作成時にできているSecretがマウントされていることを確認すること。
この設定がないと、io.kubernetes.client.ApiException: Forbidden at K8S pod · Issue #542 · kubernetes-client/java のエラーとなり、kubernetesのリソースにアクセスできない。
|
|
SpringBootApplication
build.gradle
|
|
SimpleRestControllerApplication.java
|
|
ConfigMapWatchScheduler.java
|
|
Execution Result
|
|
Reference
- SkaffoldのGetting StartedをMinikubeでサクッと試す - Qiita
- ConfigMap | Kubernetes
- KubernetesのRBACについて - Qiita
- kubernetes-client/java: Official Java client library for kubernetes
- io.kubernetes.client.ApiException: Forbidden at K8S pod · Issue #542 · kubernetes-client/java
- Configure Service Accounts for Pods | Kubernetes
- Using RBAC Authorization | Kubernetes
- RBAC認可を使用する | Kubernetes
- ServiceAccount を作成して Pod から kubectl を使って Pod の情報を取得する - Qiita
- spring-cloud-kubernetes/KubernetesClientConfigMapPropertySource.java at master · spring-cloud/spring-cloud-kubernetes