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

use*_*472 5 kubernetes kubectl

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

master $ kubectl run nginx --image=nginx --restart=Never --env=MY_PORT=8080 --dry-run -o yaml  > Pod.yaml
Run Code Online (Sandbox Code Playgroud)

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

spec:
     containers:
     - env:
       - name: MY_PORT
         value: "8080"
       image: nginx
       name: nginx
       ports:
       - containerPort: $(MY_PORT)
Run Code Online (Sandbox Code Playgroud)

当我尝试创建 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
Run Code Online (Sandbox Code Playgroud)

我尝试引用 ${MY_PORT} 、 MY_PORT 等,但始终出现与上面相同的错误。

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

Dav*_*aze 4

您不能在那里使用环境变量。在ContainerPortAPI 对象中,该containerPort字段被指定为整数。变量替换只在几个地方被支持,并且在它支持的地方被调用;请参阅示例argscommand更高级别的ContainerAPI 对象

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