Как я могу предоставить доступ к службе StatefulSet с ClusterIP None на облачной платформе Google?

#kubernetes #google-cloud-platform #kubernetes-statefulset

#kubernetes #google-cloud-platform #kubernetes-statefulset

Вопрос:

Как я могу предоставить доступ к службе StatefulSet (cassandra, mysql и т.д.) С ClusterIP=None помощью Kubernetes в облачной платформе Google?

Мне нужно изменить конфигурацию ClusterIP? Или мне нужно настроить Google Cloud NAT? Или мне нужно изменить другие вещи?

Спасибо

РЕДАКТИРОВАТЬ: я хочу подключиться к cassandra с внешнего IP-адреса из любого места в Интернете

РЕДАКТИРОВАНИЕ 2: Я предполагаю, что решение заключается в использовании LoadBalance вместо ClusterIP , но когда я использую LoadBalance , узлы Cassandra не могут найти начальный узел. Затем я подключился с помощью ClusterIP=None к кластеру Cassandra и создал другой модуль с помощью type=LoadBalance для подключения к Cassandra и для подключения к exterior. И теперь это работает 🙂

Комментарии:

1. Почему вы хотите, чтобы ClusterIP был None?

2. @FrankYuchengGu сервис для statefulset будет иметь ClusterIP = None и называется безголовым сервисом

3. @Rui, ты имеешь в виду предоставление доступа за пределами кластера?

4. Возможно, вы захотите взглянуть на следующие статьи, которые дадут вам некоторое представление о том, чего вы хотите достичь. kubernetes.io/docs/concepts/services-networking/service / … и itnext.io/exposing-statefulsets-in-kubernetes-698730fb92a1

Ответ №1:

Если под «предоставлением» вы подразумеваете возможность доступа к конечным точкам вашего сервиса без кластерного IP, тогда просто используйте selector в своем безголовом сервисе, т.Е.

 apiVersion: v1
kind: Service
metadata:
  name: cassandra
spec:
  clusterIP: None
  selector:
    app: cassandra
  ports:
  - port: 80
    targetPort: 80
  

Для получения более подробной информации обратитесь к документации

В противном случае, если вы хотите предоставить доступ к своим развертываниям за пределами кластера, вы не сможете сделать это с помощью headless service.

Комментарии:

1. Я хочу предоставить доступ к Интернету. Я хочу, чтобы внешние серверы подключались к cassandra.

2. @RuiMartins тогда в чем причина ClusterIP: None ? Почему я не могу предоставить доступ с помощью LoadBalancer типа порта?

3. Я следовал инструкциям примеров «КАК СОЗДАТЬ КЛАСТЕР CASSANDRA В KUBERNETES»

4. Я изменил на «LoadBalancer», но с «LoadBalancer» запускается только один узел, остальные узлы выходят из строя. Я думаю, что cassandra должна быть ClusterIP без IP. Я прочитал это здесь: github.com/jaegertracing/jaeger-kubernetes/issues/33 «это могло быть вызвано тем, что я изменил настройку ClusterIP, чтобы получить IP-адрес, вместо того, чтобы оставить его как None. согласно документам — kubernetes.io/docs/concepts/workloads/controllers/statefulset — требуется служба без заголовка, поэтому это выглядит как PEBKAC. теперь работает нормально.»

5. Изначально вы хотели предоставить доступ к своей службе в Интернете, а теперь возвращаетесь к утверждению, что требуется безголовый сервис. Это что-то спорное. Единственное возможное решение — предоставить безголовую службу через ingress с matchLabels селектором

Ответ №2:

Службы ClusterIP не предоставляются за пределами кластера Kubernetes. Возможно, вы имеете в виду использовать вместо этого службу NodePort или LoadBalancer?

Ответ №3:

Если вы хотите предоставить доступ к службе извне, вам понадобится служба с поддержкой ClusterIP, будь то NodePort или LoadBalancer; даже если вы используете ingress, вам нужно будет создать резервную копию с помощью службы ClusterIP, по крайней мере.

ClusterIP является только внутренним и предоставляет кластеру Kubebernetes фиксированную конечную точку для внутренней ссылки на ваше развертывание / модуль. Самый простой способ предоставить доступ к вашим службам — использовать NodePort , в этом случае ваша служба будет использовать IP внешнего узла с большим номером порта (30000 ). В GCP, если вы определите load-balancer , вам будет предоставлен внешний IP-адрес, и трафик будет перенаправляться по порядку на ваши модули в наборах с отслеживанием состояния. Если вы используете ingress, ваш внешний IP будет таким же, как у вашего ingress, и пересылка пакетов вашим службам будет выполняться на основе URL-адреса запроса (т.Е. у вас может быть несколько полных доменных имен, сопоставленных одному внешнему IP в вашем DNS).

«Безголовые» службы в основном используются для отделения вашего дизайна от Kubernetes. Предполагается, что вы будете самостоятельно обнаруживать службу, и я не верю, что это хороший вариант использования для вашего приложения.

Надеюсь, это поможет!