#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. Предполагается, что вы будете самостоятельно обнаруживать службу, и я не верю, что это хороший вариант использования для вашего приложения.
Надеюсь, это поможет!