После небольшого количества пота и слез я понял это.Я нашел две альтернативы использованию хост-сети, обе из которых дают нам больше свободы в использовании хост-портов в других модулях.
1.Сопоставить containerPort с hostPort
Этот метод немного лучше, чем сетевое соединение с хостом, поскольку он требует только очень специфических портов на хосте.
Преимущества: несколько модулейтеперь могут использовать хост-порты ДОЛГО КАК они используют разные хост-порты.Другое преимущество состоит в том, что вы можете использовать порты практически в любом диапазоне, например, ниже 1000 и т. Д.
Недостатки: несколько модулей в одном развертывании или Statefulset все еще не могут сосуществовать с этимконфигурации, поскольку они будут использовать один и тот же порт хоста.Таким образом, ошибка «порт узла недоступен» будет сохраняться.
deploy.yaml
...
- containerPort": 9000
hostPort": 9000
...
2.Используйте nodePort в вашем сервисе, сопоставьте с containerPort
Это было то, что по существу сделало это для меня.Разрешено использовать NodePorts в диапазоне настроек вашего сервиса от 30000 до 32767. Поэтому у меня не было возможности сопоставить 8081 и 443 с их соответствующими nodePort.Таким образом, я сопоставил свой 443 containerPort с портом узла 30443 в моей службе LoadBalancer, а 8081 containerPort с портом узла 30881.Затем я сделал несколько изменений в своем коде (передал эти новые порты узла как env var), когда моему приложению нужно знать, какой порт хоста используется.
Преимущества: Вы можете масштабировать свое развертывание столько, сколько захотите!Вы также не будете занимать известные порты, если они понадобятся позже.
Недостатки: диапазон (30000 - 32767) ограничен.Также никакие две службы не могут совместно использовать эти nodePorts, поэтому вы сможете использовать только службу TCP или UDP.Также вам придется внести некоторые изменения в ваше приложение для работы с портами с большим числом.
service.yaml
...
- name: out
targetPort: 8081
port: 30881
nodePort: 30881
protocol: TCP
- name: https
nodePort: 443
port: 30443
targetPort: 30443
protocol: TCP
...
Так что в основном любой ресурс, который использует nodePortбудет тот, из которых вы можете иметь только один, если вы используете определенный порт хоста.Поэтому, если вы решите использовать pod hostPort, у вас может быть только один pod с этим портом, а если вы решите использовать service nodePort, у вас может быть только одна служба с этим портом на вашем узле.