gpt4 book ai didi

kubernetes - 如何使 k8s 微服务主机名相对于命名空间通用

转载 作者:行者123 更新时间:2023-12-02 11:39:04 27 4
gpt4 key购买 nike

目前我们的 k8s 项目有以下用例,命名空间被硬编码到 values.yaml 和应用程序源代码中

(apps) namespace - NS1                 

> micro-service-A1

> micro-service-A2

> micro-service-A3

(database) namespace - DB1

> mongo-service

(messaging) namespace - MB1

> kafka-zk-service

我们希望在每个工程师(开发人员)定义的唯一命名空间中运行多组上述服务(应用程序、数据库、消息传递)
这样每个开发人员都可以安全地关闭/播放更改属于他的完整集,而不必担心影响其他开发人员的命名空间。

# Developer1(设置)
(apps) namespace - Dev1   

> micro-service-A1

> micro-service-A2

> micro-service-A3

(database) namespace - Dev1_DB

> mongo-service

(messaging) namespace - Dev1_MB

> kafka-zk-service

# Developer2(设置)
(apps) namespace - Dev2                

> micro-service-A1

> micro-service-A2

> micro-service-A3

(database) namespace - Dev2_DB

> mongo-service

(messaging) namespace - Dev2_MB

> kafka-zk-service

yamls 和应用程序源代码的配置应该是什么,以便在开发人员选择的任何命名空间中动态部署都是可行的?

最佳答案

外化配置

最好将您的配置外部化,以便您可以使用不同的配置而无需构建新镜像。

使用 ConfigMap 进行地址配置,例如到其他服务或数据库。见 DNS for Services and Pods为寻址。

apiVersion: v1
kind: ConfigMap
metadata:
name: config
data:
SERVICE_A: service-a.a-namespace.svc.cluster.local
SERVICE_B: service-b.b-namespace.svc.cluster.local
DB: db.local

通过将 ConfigMap 中的值映射到您的 Pod 中,将其用作应用程序中的环境变量。或 Deployment在 PodTemplate 中
  containers:
- name: app-container
image: k8s.gcr.io/app-image
env:
- name: SERVICE_A_ADDRESS
valueFrom:
configMapKeyRef:
name: config
key: SERVICE_A
- name: SERVICE_B_ADDRESS
valueFrom:
configMapKeyRef:
name: config
key: SERVICE_B

具有外部名称的服务

如果您想将服务移动到新的命名空间但保留地址,您可以留下 Service with External Name
kind: Service
apiVersion: v1
metadata:
name: service-a
namespace: namespace-a
spec:
type: ExternalName
externalName: service-c.namespace-c.svc.cluster.local
ports:
- port: 80

关于kubernetes - 如何使 k8s 微服务主机名相对于命名空间通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59916464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com