【问题标题】:Kubernetes Ingress/nginx pod specific valueKubernetes Ingress/nginx pod 特定值
【发布时间】:2021-02-18 22:46:22
【问题描述】:

我对 Kubernetes 很陌生,仍在学习如何使用 LB、入口等。目前,我正在尝试为每个主机设置特定于 pod 的值(配置)。看起来在入口 yaml 规范中,它可以从值中读取配置。但我想阅读入口规范,例如主机,在 Values.yaml 中。

例如,我有两个主机

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: service
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: service-A.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myservicea
          servicePort: 80
  - host: service-B.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myserviceb
          servicePort: 80

我在 values.yaml 中有两个变量:

var1: aaa
var2: bbb

我想通过

  1. var1 到 service-A.com/myservicea
  2. var2 到 service-B.com/myserviceb

或两者都通过,但应用程序必须能够识别它是什么主机,然后它才能使用正确的变量。

是否有任何配置/api 可用于此目的?

【问题讨论】:

  • 你需要创建 secret 并用作 env kubernetes.io/docs/concepts/configuration/secret
  • 您能否详细说明您想要实现的目标? Ingress 负责 HTTP 流量重定向。您想为特定部署应用特定配置吗?如果是这样,您可以使用ConfigMapSecrets,如果这是密码等敏感数据。您想使用 values.yaml 您是否阅读过有关 Helm 的信息并希望将其应用到您的集群中?
  • @PjoterS,谢谢!我刚刚阅读了有关 ConfigMap 的信息,这会有所帮助。但是,它不会解决我的问题。我能够将环境变量暴露给 pod。但是 pod 需要知道使用哪个 var,因为它不是无状态的 LB 服务。每个 pod 将针对同一种作业使用不同的值。还有那个主机,例如serviceA 必须绑定到每个部署的完全相同的值。例如。 www.serviceA.com/process,它应该读取varA,并用varA做逻辑,并将结果渲染回来。我发现我能够将 StatefulSet metadata.name(服务名称)设置为 env var。所以逻辑可以在应用程序中完成。
  • 我仍然对你想要达到的目标感到困惑。您有具有特定 env 变量的 pod,并且您希望(基于该 env)将此特定 pod 路由到包含此 env var 的主机?你想根据这个环境变量路由流量吗?你提到你想通过var1 to service-A.com/myservicea。您的意思是在 pod 将被重定向到此服务时添加 env 变量,或者更像是基于此 env 的路由?

标签: nginx kubernetes kubernetes-ingress


【解决方案1】:

这是您可以创建秘密的方法。

kubectl create secret generic CUSTOM_VAR\
      --from-literal=VAR_A=aaa\
      --from-literal=VAR_B=bbb

这就是你可以在你的 deployment.yml 中访问秘密的方式

apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myservicea-depl
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: myservice
      template:
        metadata:
          labels:
            app: myservice
        spec:
          containers:
            - name: myservice
              image: user/myservicea
              env:
                - name: VAR_A
                  value: aaa // this way you directly pass values here
                - name: VAR_A // this way you can store this as secret in k8s
                  valueFrom:
                    secretKeyRef:
                      name: CUSTOM_VAR
                      key: VAR_A

【讨论】:

  • 谢谢!我认为这非常接近我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2019-02-24
  • 2018-07-05
  • 2019-08-01
  • 2022-01-08
相关资源
最近更新 更多