GKE — как подключить статический IP-адрес к внутреннему балансировщику нагрузки

Я хочу подключить сервис из одного кластера GKE к другому. Я создал сервис как внутренний балансировщик нагрузки и хотел бы привязать к нему статический ip. Я создал свой сервис.yml

apiVersion: v1
kind: Service
metadata:
  name: ilb-service
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
    kubernetes.io/ingress.global-static-ip-name: es-test
  labels:
    app: hello
spec:
  type: LoadBalancer
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Однако после применения -f, когда я проверяю службу, вход балансировщика нагрузки выглядит так:

status:
  loadBalancer:
    ingress:
    - ip: 10.156.0.60

И я не могу подключиться, используя статический ip. Как это решить?

РЕДАКТИРОВАТЬ:

After suggestion I changed the yml file to:
apiVersion: v1
kind: Service
metadata:
  name: ilb-service
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: hello
spec:
  type: LoadBalancer
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  loadBalancerIP: "xx.xxx.xxx.xxx" -- here my static ip

Сервис теперь выглядит так:

spec:
  clusterIP: 11.11.1.111
  externalTrafficPolicy: Cluster
  loadBalancerIP: xx.xxx.xxx.xxx
  ports:
  - nodePort: 31894
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: hello
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer: {}

И я все еще не могу подключиться


person Clyde Barrow    schedule 05.02.2020    source источник
comment
Имеет ли создаваемый балансировщик нагрузки GCP тот же IP-адрес, что и указанный в вашей спецификации?   -  person Patrick W    schedule 05.02.2020
comment
На самом деле, если ваш статус остается пустым, как сейчас, это означает, что IP-адрес не назначается. IP-адрес в настоящее время зарезервирован как статический? если да, то не получится. IP-адрес должен быть доступен. Если он зарезервирован как статический, платформа GCP не увидит его доступным.   -  person Patrick W    schedule 05.02.2020
comment
Да, я зарезервировал ip как статический, я думал, что это и есть вся подсказка. Итак, какой IP-адрес я должен указать в качестве loadBalancerIP, чтобы он работал? Просто выбрать что-то случайное из моего диапазона? В настоящее время он описывает мой внешний IP-адрес как ожидающий ``` ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВОЗРАСТ ilb-service LoadBalancer 11.11.1.111 ‹ожидание› 80:31894/TCP 28m ```   -  person Clyde Barrow    schedule 05.02.2020
comment
Да просто использовать любой неиспользованный из подсети. Вы даже можете освободить текущий зарезервированный IP-адрес и использовать его. Это распространенная ошибка, и в документе gcp неясно, как это работает. Это специально для внутренних балансировщиков нагрузки   -  person Patrick W    schedule 05.02.2020
comment
спасибо, это работает прямо сейчас. Но я хотел иметь возможность подключаться из одного кластера к балансировщику нагрузки по какому-то DNS-имени, а не по ip. В документах я читал, что резервирование статического IP-адреса и добавление записи DNS является решением. Как добраться до балансировщика нагрузки по имени DNS в вашем подходе?   -  person Clyde Barrow    schedule 05.02.2020
comment
Вы по-прежнему можете настроить DNS для того, что вы используете в качестве DNS-сервера. Up является статическим, пока он используется   -  person Patrick W    schedule 05.02.2020


Ответы (1)


Вы не будете использовать аннотацию для внутреннего IP. Вместо этого просто укажите IP-адрес, который вы хотите использовать (не по имени), в ссылке spec.loadBalancerIP позволяет указать числовой IP-адрес для назначения loadBalancer. Убедитесь, что IP-адрес нигде больше не используется и находится в той же подсети, что и ваш кластер.

РЕДАКТИРОВАТЬ

Чтобы уточнить последнее утверждение: если у вас есть внутренний IP-адрес, зарезервированный как статический IP-адрес, этот IP-адрес больше недоступен, он считается «используемым» статическим резервированием. Чтобы назначить IP-адрес внутреннему балансировщику нагрузки, этот IP-адрес не должен быть зарезервирован или использоваться.

Это не ясно, но из-за того, как контроллер GCP создал внутренние балансировщики нагрузки, он не может использовать уже зарезервированный IP-адрес.

person Patrick W    schedule 05.02.2020