Установить порт контейнера на основе свойства среды - PullRequest
0 голосов
/ 03 мая 2020

Я устанавливаю значение порта в свойстве среды при генерации яма Pod.

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

Я пытаюсь использовать свойство среды MY_PORT в разделе портов моего яма Pod.

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 et c .., но все время та же ошибка, что и выше .

Как использовать значение переменной среды в целочисленном поле.

1 Ответ

2 голосов
/ 03 мая 2020

Вы не можете использовать переменную окружения там. В ContainerPort объекте API поле containerPort указывается как целое число. Подстановка переменных поддерживается только в нескольких местах, и там, где это происходит, она вызывается; см., например, args и command в более высоком уровне Container объект API .

Нет причин делать это настраиваемым. В среде Kubernetes у модуля будет собственный IP-адрес, поэтому нет риска конфликта; если вы хотите использовать другой номер порта для подключения, вы можете настроить службу, где например, порт 80 в службе перенаправляет на порт 8080 в модуле. (В простом Docker вы можете сделать то же самое с опцией docker run -p 80:8080: вы всегда можете выбрать внешний порт, даже если номер порта внутри контейнера фиксирован.) Я бы удалил настройку переменной среды.

...