Использование хост-порта и хост-сети в Kubernetes
Использование хост-порта и хост-сети в Kubernetes

пример хост-порта

Язык кода:javascript
копировать
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: nginx-hostport
    qcloud-app: nginx-hostport
  name: nginx-hostport
  namespace: cjweichen
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: nginx-hostport
      qcloud-app: nginx-hostport
  template:
    metadata:
      labels:
        k8s-app: nginx-hostport
        qcloud-app: nginx-hostport
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          hostPort: 8000
          name: http
          protocol: TCP
        - containerPort: 443
          hostPort: 44300
          name: https
          protocol: TCP

Проверка доступа заключается в следующем. Доступ к нему осуществляется обычно через PODIP+containerPort и IP узла+hostPort.

Сходства и различия между HostPort и HostNetwork

Сходства

HostPort и hostNetwork по существу раскрывают IP-адрес узла, на котором расположен модуль, конечным пользователям. Поскольку жизненный цикл модуля не фиксирован и может быть ненормально перестроен в любое время, неопределенность IP-адреса в конечном итоге приводит к неудобствам для пользователей. , порт хоста занят. Это также предотвращает использование одним и тем же портом на одном компьютере несколькими программами. Поэтому вообще не рекомендуется использовать метод hostPort.

Различия

При использовании hostNetwork модуль фактически использует сетевое адресное пространство хоста модуля: то есть IP-адрес модуля — это IP-адрес хоста, а не IP-адрес модуля, назначенный cni, а порт — это интерфейс прослушивания сети хоста.

При использовании hostPort IP-адрес модуля не является IP-адресом хоста, а IP-адресом модуля, выделенным cni. Он использует тот же метод выделения IP, что и другие обычные модули. Порт не является портом прослушивания сети хоста, но для сопоставления используется механизм DNAT. порт, указанный в параметре hostPort, на порт контейнера (можно просмотреть с помощью команды iptables). При внешнем доступе к этому поду по-прежнему используются методы хоста и хост-порта. Скриншоты IP-адреса модуля и IP-адреса хоста следующие:

Соответствующий порт DNAT можно просмотреть с помощью команды iptables, как показано на скриншоте ниже:

Как видно из рисунка выше, поток таблицы iptables nat на хосте, где расположен модуль, выглядит следующим образом:

1 Когда клиент инициирует pod Во время посещения, например. curl http://pod_in_host:hostPort

2 Сетевой пакет пройдет через цепочку предварительной маршрутизации узла модуля и попадет в цепочку CNI-HOSTPORT-DNAT.

3 Сетевой пакет будет проходить через третье правило в цепочке CNI-HOSTPORT_DNAT, которое является целью DNAT. В это время трафик, доступный через порт 9998, будет перенаправлен на порт 80.

Исходя из этого, когда клиент обращается к порту 8000 хоста, на котором расположен под, трафик будет автоматически перенаправлен на порт 80 с IP 10.55.3.5 (то есть ip пода).

Когда модуль использует и HostNetwork, и HostPort, HostNetwork будет напрямую использовать пространство имен хост-сети, а HostPort фактически бесполезен. Можно считать, что опция хостNetwork имеет более высокий приоритет, чем хост Порт.

пример хостсети

Язык кода:javascript
копировать
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hostnetwork
  namespace: cjweichen
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: nginx-hostnetwork
      qcloud-app: nginx-hostnetwork
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s-app: nginx-hostnetwork
        qcloud-app: nginx-hostnetwork
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          hostPort: 80
          name: http
          protocol: TCP
        - containerPort: 443
          hostPort: 443
          name: https
          protocol: TCP
        resources: {}
      dnsPolicy: ClusterFirst
      hostNetwork: true
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода