根据环境属性设置容器端口

时间:2020-05-03 05:03:00

标签: kubernetes kubectl

我在生成Pod Yaml时在环境属性中设置端口值。

master $ kubectl run nginx --image=nginx --restart=Never --env=MY_PORT=8080 --dry-run -o yaml  > Pod.yaml

我正在尝试在Pod yaml的ports部分中使用环境属性MY_PORT。

spec:
     containers:
     - env:
       - name: MY_PORT
         value: "8080"
       image: nginx
       name: nginx
       ports:
       - containerPort: $(MY_PORT)

当我尝试创建Pod时,出现以下错误消息。

error: error validating "Pod.yaml": error validating data: ValidationError(Pod.spec.containers[0].ports[0].containerPort): invalid type for io.k8s.api.core.v1.ContainerPort.containerPort: got "string", expected "integer"; if you choose to ignore theseerrors, turn validation off with --validate=false

我尝试像$ {MY_PORT},MY_PORT等这样引用。但是一直都存在与上面相同的错误。

我如何在整数字段中使用环境变量值。

1 个答案:

答案 0 :(得分:2)

您不能在那里使用环境变量。在ContainerPort API object中,containerPort字段被指定为整数。变量替换仅在几个地方受到支持,在某些地方被人们称为它。例如,请参见较高级别Container API object中的argscommand

没有理由使其可配置。在Kubernetes环境中,该Pod将拥有其自己的IP地址,因此没有冲突的风险。如果您要使用其他端口号进行连接,则可以设置服务,其中服务上的例如端口80转发到Pod中的端口8080。 (在普通Docker中,您可以使用docker run -p 80:8080选项执行类似的操作:即使容器内的端口号是固定的,您也可以始终选择外部端口。)我将删除环境变量设置。