Есть ли способ получить домен для GKE loadbalancer вместо ip? - PullRequest
0 голосов
/ 19 октября 2019

Редактировать : Я работаю над проектом, который развертывает на GKE несколько проектов в день на 100% автоматически. Наш проект разработан в nodejs, здесь псевдокод:

projects = get_all_projects_today() // returns 15 projects for today (for example)

for project in projects
    deploy_to_GKE(project) //generate a deployment manifest for project and post it to GKE (using api call)
    public_ip = create_service_on_GKE(project, type=Loadbalancer) //generate a service manifest (type loadbalancer) for project, post it to GKE (using api call) and returns the public created ip address
    get_domain_from_ip(public_ip) //how to do this !

развернутые проекты должны быть доступны через доменные имена, а не ip, например, так:

appx.mysite.com, or
mysite.com/appx

Конец редактирования

Вот пример манифеста службы, который я использую:

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "backend-__ID__"
    },
    "spec": {
        "selector": {
            "app": "backend-__ID__"
        },
        "type": "LoadBalancer",
        "ports": [
            {
                "name": "app1",
                "protocol": "TCP",
                "port": 8080,
                "targetPort": "8080"
            },
            {
                "name": "app2",
                "protocol": "TCP",
                "port": "3010",
                "targetPort": "3010"
            }
        ]
    }
}

, который дает мне этот результат в облаке Google: enter image description here

Единственный способ получить доступ к проекту извне - это использовать IP-адрес (конечная точка), но это блокирует использование куки (мы не можем устанавливать куки на ip, нам нужно использовать доменное имя).

Так есть ли способ автоматически получить из именованных доменов GKE конечных точек для доступа к проекту извне?

Я пытался использовать обратный поиск DNS, чтобы получить имя домена для внешнего ip, но этоне сработало: (

Спасибо

Ответы [ 2 ]

1 голос
/ 19 октября 2019

GKE не создаст для вас доменное имя (или даже не предоставит временное имя, например, с appengine или конечными точками). Однако вы можете настроить loadbalancer на использование статического IP-адреса, который вы зарезервировали, а затем запустить DNS с именем хоста для этого IP-адреса.

Для службы LoadBalancer это делается с региональным IP-адресом, поэтомусначала вам нужно зарезервировать IP-адрес , например:

gcloud compute addresses create my-service-ip --region us-central1

(для этого также есть REST API, см. ссылку выше). Обратите внимание, что Google взимает небольшую плату за наличие зарезервированного IP-адреса, который не используется экземпляром LoadBalancer или VM.

Затем настройте DNS (возможно, используя Cloud DNS , но любой DNS). провайдер будет работать), чтобы указать нужное имя на этом IP-адресе.

Наконец, когда вы создаете loadbalancer , вам необходимо передать статический IP-адрес как «loadBalancerIP». Я не делал этого через JSON, но вот пример с YAML:

apiVersion: v1
kind: Service
metadata:
  name: backend-__ID__
spec:
  selector:
    app: backend-__ID__
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

Вы также можете прочитать полную документацию по использованию доменного имени в вашем кластере GKE .

Это также возможно сделать с помощью балансировщика нагрузки HTTP (S) через Ingress , но методика немного отличается, в этом случае вам нужно добавить «kubernetes.io/ingress.global». -static-ip-name "аннотация к метадке вашего входа со значением name вашего зарезервированного статического IP-адреса. В этом случае статический IP-адрес должен быть глобальным, а не региональным.

0 голосов
/ 25 октября 2019

Я нашел это!

с помощью обратного просмотра DNS, я обнаружил, что Google предоставляет домен, подобный этому: [LOADBALANCER_IP] .bc.googleusercontent.com.

пример сайта обратного просмотра DNS: https://mxtoolbox.com/ReverseLookup.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...