首页 > 解决方案 > Kubernetes:从 aconfig 获取端口?

问题描述

有什么方法可以从 a 为服务(和其他地方)注入端口值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"

标签: kubernetesconfigmapkubernetes-service

解决方案


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

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

根据Kubernetes API 参考文档的注释:

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


推荐阅读