Spring Cloud Kubernetes ConfigMap 重新加载不起作用

Ere*_*esh 5 spring-boot kubernetes minikube configmap spring-cloud-kubernetes

我在 Minikube 中玩 Kubernetes。我能够将 Spring Boot 示例应用程序部署到 Kubernetes 中。

\n\n

我正在探索 Kubernetes configMap。我可以使用 Spring Cloud Starter 成功运行 Spring Boot 应用程序,并从配置映射中选择属性键。到这里我就成功了。

\n\n

我当前面临的问题是 configmap 重新加载。

\n\n

这是我的配置图:

\n\n

配置映射.yaml

\n\n
 apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: minikube-sample\n  namespace: default\ndata:\n  app.data.name: name\n  application.yml: |-\n    app:\n      data:\n        test: test\n
Run Code Online (Sandbox Code Playgroud)\n\n

bootstrap.yaml

\n\n
management:\n    endpoint:\n        health:\n            enabled: true\n        info:\n            enabled: true\n        restart:\n            enabled: true\nspring:\n    application:\n        name: minikube-sample\n    cloud:\n        kubernetes:\n            config:\n                enabled: true\n                name: ${spring.application.name}\n                namespace: default\n            reload:\n                enabled: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

家庭控制器:

\n\n
package com.minikube.sample.rest.controller;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.minikube.sample.properties.PropertiesConfig;\nimport lombok.Getter;\nimport lombok.Setter;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Lookup;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n/**\n * @author Gorantla, Eresh\n * @created 06-12-2018\n */\n@RestController\n@RequestMapping("/home")\npublic class HomeResource {\n\n    @Autowired\n    PropertiesConfig config;\n\n    @GetMapping("/data")\n    public ResponseEntity<ResponseData> getData() {\n        ResponseData responseData = new ResponseData();\n        responseData.setId(1);\n        responseData.setName(config.getName());\n        responseData.setPlace("Hyderabad");\n        responseData.setValue(config.getTest());\n        return new ResponseEntity<>(responseData, HttpStatus.OK);\n    }\n\n    @Getter\n    @Setter\n    public class ResponseData {\n        private String name;\n        private Integer id;\n        private String place;\n        private String value;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

部署.yaml

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: minikube-sample\n  namespace: default\nspec:\n  selector:\n      matchLabels:\n        app: minikube-sample\n\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: minikube-sample\n    spec:\n      containers:\n        - name: minikube-sample\n          image: minikube-sample:latest\n          imagePullPolicy: Never\n          ports:\n            - containerPort: 8080\n          env:\n            - name: env.namespace\n              value: default\n          volumeMounts:\n            - name: config\n              mountPath: /config\n      volumes:\n        - name: config\n          configMap:\n            name: minikube-sample\n
Run Code Online (Sandbox Code Playgroud)\n\n

我使用 @ConfigurationProperties 重新加载属性。

\n\n

依赖关系

\n\n
 <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-kubernetes</artifactId>\n            <version>1.1.0.RELEASE</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-kubernetes-config</artifactId>\n            <version>1.1.0.RELEASE</version>\n        </dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我做了什么 ?\n我已经阅读了 Spring Cloud 文档。 “需要服务帐户上的查看角色才能侦听配置映射更改。” \n然后我通过以下命令创建了集群视图角色

\n\n
C:\\Users\\eresh.gorantla\\apps\\minikube-sample\\src\\main\\fabric8 (master -> origin)\n\xce\xbb kubectl create clusterrolebinding minikube-sample --clusterrole=view --serviceaccount=default:minikube --namespace=default\nclusterrolebinding.rbac.authorization.k8s.io/minikube-sample created\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我更新 kubernetes 中的 configmap 时,属性不会立即重新加载。\n我怀疑集群角色绑定中出现问题。\n请说出你的想法。任何帮助表示赞赏。

\n

gea*_*ars 2

部署尚未serviceAccountName配置,因此它使用default服务帐户。然而,问题中的命令 - - 适用于命名空间中kubectl create clusterrolebinding ... --serviceaccount=default:minikube...指定的帐户。minikubedefault

此外,当命名空间可以工作clusterrolebinding时,创建可能“太多” 。rolebinding

对于default命名空间 ( metadata.namespace: default) 的部署,这应该创建一个适当的rolebinding权限来向帐户授予只读权限default

kubectl create rolebinding default-sa-view \
  --clusterrole=view \
  --serviceaccount=default:default \
  --namespace=default
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅使用 RBAC 授权