У меня есть веб-приложение с весенней загрузкой, которое просто печатает свойство, которое передается в ConfigMap Kubernetes.
Это мой основной класс:
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class DemoApplication {
private MyConfig config;
private DiscoveryClient discoveryClient;
@Autowired
public DemoApplication(MyConfig config, DiscoveryClient discoveryClient) {
this.config = config;
this.discoveryClient = discoveryClient;
}
@RequestMapping("/")
public String info() {
return config.getMessage();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RequestMapping("/services")
public String services() {
StringBuilder b = new StringBuilder();
discoveryClient.getServices().forEach((s) -> b.append(s).append(" , "));
return b.toString();
}
}
и MyConfig
класс:
@Configuration
@ConfigurationProperties(prefix = "bean")
public class MyConfig {
private String message = "a message that can be changed live";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Обычно, вызывая корневой ресурс, я всегда получаю:
сообщение, которое можно изменить в реальном времени
И вызывая /сервисы Я фактически получаю список сервисов Kubernetes.
Я создаю ConfigMap с kubectl create -f configmap-demo.yml
содержимым:
apiVersion: v1
kind: ConfigMap
metadata:
name: demo
data:
bean.message: This is an info from k8
И развертыванием с kubecetl create -f deploy-demo.yml
и содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
labels:
app: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
# this service account was created according to
# https://kubernetes.io/docs/reference/access-authn-authz/rbac/#service-account-permissions
# point 5 - Grant super-user access to all service accounts cluster-wide (strongly discouraged)
serviceAccountName: i18n-spring-k8
containers:
- name: demo
image: aribeiro/sck-demo
imagePullPolicy: Never
env:
- name: JAVA_OPTS
value:
ports:
- containerPort: 8080
volumes:
- name: demo
configMap:
name: demo
Проблема в том, что при доступе к корневому ресурсу /
я всегда получаю жестко заданное значение по умолчанию, а не то, что определено в ConfigMap Kubernetes.
Пример проекта также с yamlфайлы и файл Docker доступны по адресу https://drive.google.com/open?id=107IcwnYIbVpmwVgdgi8Dhx4nHEFAVxV8.
Также проверены журналы запуска DEBUG, и я не вижу ошибок или подсказок, почему он не должен работать.