【问题标题】:Kubernetes: get port from aconfig?Kubernetes:从 aconfig 获取端口?
【发布时间】:2021-08-19 10:10:36
【问题描述】:

有没有办法从ConfigMap 为服务(和其他地方)注入端口值?试过这个:

apiVersion: v1
kind: Service
metadata:
  name: service
  namespace: namespace
spec:
  ports:
    - port: 80
      targetPort:
        valueFrom:
          configMapKeyRef:
            name: config
            key: PORT
      protocol: TCP
  selector:
    app: service

但出现错误

ValidationError(Service.spec.ports[0].targetPort): invalid type for io.k8s.apimachinery.pkg.util.intstr.IntOrString: got "map", expected "string"

【问题讨论】:

标签: kubernetes configmap kubernetes-service


【解决方案1】:

好的,所以我已经更深入地检查了它,看起来您无法在 service.spec 定义中对 ConfigMap 进行这样的引用。 valueFrom 的这种用法只能用于容器环境变量,如here 中所述。

另一方面,您可以在 deployment.spec(在这种情况下 service.spec.ports.targetPort)中按名称指定 targetPort,例如 mycustomport 并引用此mycustomport 在 deployment.spec 和 service.spec 之间。

根据Kubernetes API reference docs的注释:

targetPort - 服务所针对的 pod 上要访问的端口号或名称。编号必须在 1 到 65535 的范围内。名称必须是 IANA_SVC_NAME。如果这是一个字符串,它将在目标 Pod 的容器端口中作为命名端口进行查找。如果未指定,则使用“端口”字段的值(身份映射)。对于 clusterIP=None 的服务,该字段将被忽略,应省略或设置为等于“端口”字段。更多信息:https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service

【讨论】:

  • 谢谢。命名端口将部分帮助。不完全是,但这总比没有好
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多