当前位置: 首页 > 知识库问答 >
问题:

spring boot cloud kubernetes配置不适用于多个pod

端木野
2023-03-14

我正在使用spring-Cloud-starter-kubernetes-all依赖项从我的Spring boot微服务中读取配置图,并且它的工作正常。

修改配置映射后,我正在使用刷新endpoint

minikube servie list # to get the servive url 
curl http://192.168.99.100:30824/actuator/refresh -d {} -H "Content-Type: application/json"

它按预期工作,应用程序加载configmap更改。

问题上面的工作正常,如果我只有我的应用程序的1个pod,但当我使用更多的1个pod只有1个pod选择更改不是全部。

在下面的示例中,只有我pod选择更改

[message-producer-5dc4b8b456-tbbjn message-producer] Say Hello to the World12431
[message-producer-5dc4b8b456-qzmgb message-producer] Say Hello to the World

minkube部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: message-producer
  labels:
    app: message-producer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: message-producer
  template:
    metadata:
      labels:
        app: message-producer
    spec:
      containers:
        - name: message-producer
          image: sandeepbhardwaj/message-producer
          ports:
            - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: message-producer
spec:
  selector:
    app: message-producer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

配置映射。yml公司

kind: ConfigMap
apiVersion: v1
metadata:
  name: message-producer
data:
  application.yml: |-
    message: Say Hello to the World

bootstrap.yml

spring:
  cloud:
    kubernetes:
      config:
        enabled: true
        name: message-producer
        namespace: default
      reload:
        enabled: true
        mode: EVENT
        strategy: REFRESH
        period: 3000

配置

@ConfigurationProperties(prefix = "")
@Configuration
@Getter
@Setter
public class MessageConfiguration {
    private String message = "Default message";
}

rbac

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  namespace: default # "namespace" can be omitted since ClusterRoles are not namespaced
  name: service-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["services"]
  verbs: ["get", "watch", "list"]

---
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
  name: service-reader
subjects:
- kind: User
  name: default # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: service-reader
  apiGroup: rbac.authorization.k8s.io

共有1个答案

薛楷
2023-03-14

这是因为当你点击卷曲http://192.168.99.100:30824/actuator/refresh-d{}-H“内容类型:application/json”kubernetes将通过循环负载平衡将该请求发送到服务后面的一个pod。

您应该通过设置spring来使用属性源重新加载功能。云库伯内特斯。重新加载enabled=true。每当配置映射中发生更改时,这将重新加载属性,因此您不需要使用刷新endpoint。

 类似资料:
  • 我试图初始化log4j记录器使用SpringIOC和使用财产onfigurator.configure配置记录器,但财产onfigurator.configure不工作。 我的问题是如何将配置(log4j.properties)传递给Logger类? 波姆。xml 混淆班 log4j。性质

  • 我正在尝试为我的项目设置多个WebsecurityConfigrerAdapter,其中Spring启动执行器API使用基本身份验证进行保护,所有其他endpoint使用JWtAuthentication进行身份验证。我只是无法使它一起工作,只有较低顺序的配置可以工作。我使用Spring Boot 2.1.5。释放 带有JWT身份验证程序的安全配置1 带有用户名/密码的基本身份验证配置 我已经尝试

  • 我在Stackoverflow上看到过类似的问题,但没有一个解决了这个问题。我刚刚从Expo桌面应用程序创建了一个新的ReactNative项目。但当Expo配置设置为LAN模式时,我无法通过二维码扫描在Android手机上运行它。在我的Android手机上似乎无法访问(看起来像)。我的手机在同一个Wifi网络上。 我还尝试通过关闭防火墙来运行Expo演示应用程序,但仍然没有成功。我相信你的一个技

  • 我有一些内容,我试图找到一些"search chText"是否存在于内容中。当我在“搜索文本”中查找一个单词时,tring.contains(搜索文本)返回true,但对多个工作返回false。下面是显示实现的片段。我需要确定搜索文本是否存在于内容中。 我需要使用正则表达式吗。让我指出我之前没有提到的研究和我的尝试。 我已经尝试了以下正则表达式

  • 我使用的Gretty示例来自:https://github.com/gretty-gradle-plugin/gretty-sample在主build.gradle我只修改了存储库URL(使用镜像回购由于代理): 建造。格雷德尔: 您可以看到端口被指定为: httpPort=8011 在子项目部分。当我运行Gradle时 格雷德卢:农场跑步 它报告: 因此,jetty仍在尝试使用默认端口8080。

  • 我将nginx设置为一种静态文件服务器。出于某种原因,只有当我去123.123.123.123/或123.123.123.123时,它才会起作用。然而,当我去123.123.123.123/static/content/或123.123.123.123/static/content/another.mp3它返回404未找到。下面是位于中并链接到的配置文件。我真的很困惑为什么它不起作用。 如有任何指