Как опубликовать службу Kubernetes без использования типа LoadBalancer (в GCP)

Я хотел бы избежать, используя type: "LoadBalancer" для определенного Сервиса Kubernetes, но все же иметь возможность публиковать его в Интернете. Я использую Google Cloud Platform (GCP) для запуска кластера Kubernetes, работающего в настоящее время на одном узле.

Я пытался нам то externalIPs конфигурация сервиса и давать по очереди, IPs:

  • экземпляру кластера Kubernetes (внешний IP, которая также conincides с IP-адреса Kubernetes узле сообщает kubernetes describe node)
  • конечная точка кластера Kubernetes (как сообщает консоль Google Cloud в деталях кластера)
  • публичный / внешний IP другого сервиса Kubernetes типа LoadBalancer работает на одном узле.

ни один из вышеперечисленных не помог мне достичь моего приложения с помощью сервиса Kubernetes с externalIPs конфигурации.

Итак, как я могу опубликовать в сети Интернет без использования LoadBalancer-тип Kubernetes Service.

1 ответов


если вы не хотите использовать LoadBalancer сервис, другие варианты публичного выставления вашего сервиса:

тип NodePort

создайте свой сервис с помощью type значение NodePort, и Kubernetes выделит порт на всех ваших VMs узла, на котором будет отображаться ваша служба (docs). Например. если у вас есть 2 узла, w / public IPs 12.34.56.78 и 23.45.67.89, и Kubernetes назначает ваш порт обслуживания 31234, тогда услуга будет доступна публично на оба!--6--> & 23.45.67.89:31234

указать externalIPs

если у вас есть возможность направлять общедоступные IP-адреса на ваши узлы, вы можете указать externalIPs в вашем сервисе, чтобы сказать Kubernetes " если вы видите что-то, предназначенное для этого IP с моим портом обслуживания, направьте его ко мне."(docs)

конечная точка кластера не будет работать для этого, потому что это только IP вашего мастера Kubernetes. Публичный IP другого LoadBalancer сервис не будет работать, потому что LoadBalancer настроен только для маршрутизации порта этой исходной службы. Я ожидаю, что IP-адрес узла будет работать, но он может конфликтовать, если ваш порт службы является привилегированным портом.

использовать /proxy/ точка

API Kubernetes включает в себя /proxy/ конечная точка, которая позволяет получить доступ к службам на IP конечной точки кластера. Е. Г. если ваш кластер конечная точка 1.2.3.4, вы могли бы достичь my-service в пространстве имен my-ns по ссылке https://1.2.3.4/api/v1/proxy/namespaces/my-ns/services/my-service с учетными данными кластера. Это действительно должно использоваться только для тестирования / отладки, так как он принимает весь трафик через ваш мастер Kubernetes по пути к сервису (дополнительные прыжки, SPOF и т. д.).