В этом руководстве показано, как использовать Google Kubernetes Engine (GKE) для предоставления доступа к вашему веб-приложению в Интернете со статическим внешним IP-адресом и настройки доменного имени, указывающего на ваше приложение. В этом руководстве предполагается, что у вас есть зарегистрированное доменное имя, например пример.com Вы можете зарегистрировать доменное имя через Google Домены или другой регистратор доменов вашего выбор, если у вас его нет ## Цели В этом руководстве показаны следующие шаги: ## Расходы В этом руководстве используются следующие оплачиваемые компоненты Google Cloud: Чтобы рассчитать стоимость на основе прогнозируемого использования, воспользуйтесь калькулятором цен Когда вы закончите работу с этим учебным пособием, вы сможете избежать дальнейшего выставления счетов, удалив созданные вами ресурсы. Дополнительные сведения см. в разделе Очистка ## Прежде чем начать Выполните следующие действия, чтобы включить Kubernetes Engine API: - Посетите страницу Kubernetes Engine в консоли Google Cloud. - Создать или выбрать проект - Дождитесь включения API и связанных с ним служб. Это может занять несколько минут - Убедитесь, что биллинг включен для вашего облачного проекта. Узнайте, как проверить, включена ли оплата для проекта Установите следующие инструменты командной строки, используемые в этом руководстве: - gcloudis используется для создания и удаления кластеров Kubernetes Engine. gcloudis входит в состав gcloudCLI - kubectlis используется для управления Kubernetes, системой оркестрации кластеров, используемой Kubernetes Engine. Вы можете установить kubectlusing gcloud: компоненты gcloud установить kubectl Клонируйте пример кода с GitHub: клон git httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app/manifests Установите значения по умолчанию для Чтобы сэкономить время при вводе идентификатора проекта и параметры зоны Compute Engine в инструмент командной строки gcloud gcloudcommand-line, вы можете установить значения по умолчанию: проект конфигурации gcloud Конфигурация проекта-idgcloud устанавливает вычисление/зону Создать кластер Создайте кластер контейнеров с именем domain-test для развертывания вашего веб-приложения: Кластеры контейнеров gcloud создают домен-тест ## Развертывание вашего веб-приложения В следующем манифесте описывается развертывание, которое запускает образец образа контейнера веб-приложения: # Copyright 2021 Google LLC # # Лицензируется в соответствии с лицензией Apache, версия 2.0 («Лицензия» # вы не можете использовать этот файл, кроме как в соответствии с Лицензией. # Вы можете получить копию Лицензии на # # httpwww.apache.org /licenses/LICENSE-2.0 # # Если это не требуется действующим законодательством или не согласовано в письменной форме, # программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", # БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. # См. Лицензию для конкретного языка, управляющего разрешениями и # ограничениями в соответствии с Лицензией. метки: приложение: привет уровень: веб-спецификация: контейнеры: - имя: привет-приложение изображение: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 порты: - containerPort: 8080 ресурсы: запросы : процессор: 200 м Выполните следующую команду, чтобы создать развертывание: kubectl применить -f helloweb-deployment.yaml ## Открытие вашего приложения Вы можете опубликовать свое приложение в GKE одним из следующих способов: Используйте службу, которая создает балансировщик сетевой нагрузки TCP, который работает с региональными IP-адресами. Используйте Ingress, который создает балансировщик нагрузки HTTP(S) и поддерживает глобальные IP-адреса. Дополнительные сведения о плюсах и минусах каждого метода см. в разделе Настройка балансировки нагрузки HTTP(S) с помощью Ingress. Воспользуйтесь услугой Чтобы убедиться, что ваше приложение имеет статический общедоступный IP-адрес, вы должны зарезервировать статический IP-адрес. Если вы решите открыть свое приложение с помощью службы, вы должны создать региональный IP-адрес. Глобальные IP-адреса работают только с типом ресурса Ingress, как описано в следующем разделе. Чтобы использовать Сервис, создайте статический IP-адрес с именем helloweb-ip в область, край us-central1: gcloud Вычислительные адреса gcloud создают helloweb-ip --region us-central1 Чтобы найти созданный вами статический IP-адрес, выполните следующую команду: Вычислительные адреса gcloud описывают helloweb-ip --region us-central1Output: адрес: 203.0.113.32 .. Коннектор конфигурации **Примечание. Этот шаг требует Коннектор конфигурации. Следовать Инструкция по установке для установки Config Connector в вашем кластере apiVersion: calculate.cnrm.cloud.google.com/v1beta1 вид: метаданные ComputeAddress: имя: спецификация helloweb-ip: местоположение: us-central1 kubectl apply -f вычисление-адрес-региональный.yamlЧтобы найти статический IP-адрес, выполните следующую команду: kubectl получить вычисляемый адрес helloweb-ip -o jsonpathspec.address}'В следующем манифесте описывается служба типа LoadBalancer, которая создает балансировщик сетевой нагрузки для предоставления подов с общедоступным IP-адресом. Заменять `YOUR.IP.ADDRESS.HERE` со статическим IP-адресом: # Copyright 2021 Google LLC # # Лицензируется в соответствии с лицензией Apache, версия 2.0 («Лицензия» # вы не можете использовать этот файл, кроме как в соответствии с Лицензией. # Вы можете получить копию Лицензии на # # httpwww.apache.org /licenses/LICENSE-2.0 # # Если это не требуется действующим законодательством или не согласовано в письменной форме, # программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", # БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. # См. Лицензию для конкретного языка, управляющего разрешениями и # ограничениями в соответствии с Лицензией. 8080 тип: LoadBalancer loadBalancerIP: "ВАШ.IP.АДРЕС.ЗДЕСЬ"Затем создайте службу: kubectl применить -f helloweb-service-static-ip.yaml Чтобы увидеть зарезервированный IP-адрес, связанный с балансировщиком нагрузки: kubectl получить сервисВывод: ИМЯ КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВОЗРАСТ helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s Используйте вход Если вы решите предоставить свое приложение с помощью Ingress, который создает балансировщик нагрузки HTTP (S), вы должны зарезервировать глобальный статический IP-адрес. Региональные IP-адреса не работают с Ingress Чтобы узнать больше о том, как использовать Ingress для предоставления доступа к вашим приложениям в Интернете, обратитесь к руководству по настройке балансировки нагрузки HTTP(S) с помощью Ingress. Чтобы создать глобальный статический IP-адрес с именем helloweb-ip: gcloud Вычислительные адреса gcloud создают helloweb-ip --global Чтобы найти статический IP-адрес, который вы создали: Вычислительные адреса gcloud описывают helloweb-ip --globalOutput: адрес: 203.0.113.32 .. Коннектор конфигурации **Примечание. Этот шаг требует Коннектор конфигурации. Следовать Инструкция по установке для установки Config Connector в вашем кластере apiVersion: calculate.cnrm.cloud.google.com/v1beta1 вид: метаданные ComputeAddress: имя: спецификация helloweb-ip: местоположение: глобальное kubectl применить -f вычисление-адрес-global.yaml Следующий манифест описывает Ingress, веб-приложение со статическим IP-адресом и двумя ресурсами: - А Сервис с тип: порт узла - Ан Вход сконфигурирован с именем службы и статической аннотацией IP. # Copyright 2021 Google LLC # # Лицензируется в соответствии с лицензией Apache, версия 2.0 («Лицензия» # вы не можете использовать этот файл, кроме как в соответствии с Лицензией. # Вы можете получить копию Лицензии на # # httpwww.apache.org /licenses/LICENSE-2.0 # # Если это не требуется действующим законодательством или не согласовано в письменной форме, # программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", # БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. # См. Лицензию для конкретного языка, управляющего разрешениями и # ограничениями в соответствии с Лицензией. -ip labels: app: hello spec: defaultBackend: service: name: helloweb-backend port: number: 8080apiVersion: v1 type: Service metadata: name: helloweb-backend labels: app: hello spec: type: NodePort selector: app: hello уровень: веб-порты: - порт: 8080 targetPort: 8080 В аннотации kubernetes.io/ingress.global-static-ip-name указывается имя глобального ресурса IP-адреса, который будет связан с загрузкой HTTP(S) Балансир Примените ресурс к кластеру: kubectl apply -f helloweb-ingress-static-ip.yamlВывод: вход "helloweb"создан сервис "helloweb-backend"создан Чтобы увидеть резервный IP-адрес, связанный с балансировщиком нагрузки: kubectl получить ingressOutput: ИМЯ ХОСТА АДРЕС ПОРТЫ ВОЗРАСТ helloweb * 203.0.113.32 80 4m ## Посещение вашего зарезервированного статического IP-адреса Чтобы убедиться, что балансировщик нагрузки настроен правильно, вы можете использовать веб-браузер для посещения IP-адреса или использования завиток: завиток http203.0.113.32/выход: Привет мир! Имя хоста: helloweb-3766687455-8lvqv ## Настройка записей вашего доменного имени Чтобы браузеры запрашивали ваше доменное имя, например example.com или поддомен имя, например blog.example.com укажите зарезервированный вами статический IP-адрес, вы должны обновить записи DNS (сервера доменных имен) вашего доменного имени Вы должны создать **A** (адрес) тип записи DNS для вашего домена или поддомена name и настроить его значение с зарезервированным IP-адресом Записи DNS вашего домена управляются вашим сервером имен. Ваш сервер имен может быть «регистратором», у которого вы зарегистрировали свой домен, службой DNS, такой как Cloud DNS, или другим сторонним поставщиком. Если вашим сервером имен является Cloud DNS: следуйте руководству по быстрому запуску Cloud DNS, чтобы настроить запись DNS A для вашего доменного имени с зарезервированным IP-адресом вашего приложения. Если вашим сервером имен является другой провайдер: обратитесь к документации службы DNS по настройке записей DNS A для настройки вашего доменного имени. Если вместо этого вы решите использовать Cloud DNS, см. раздел Миграция на Cloud DNS. ## Посещение вашего доменного имени Чтобы убедиться, что записи DNS A вашего доменного имени разрешаются в зарезервированный вами IP-адрес, посетите доменное имя Чтобы сделать DNS-запрос для записи A вашего доменного имени, запустите хозяин команда: хост example.comВывод: example.com имеет адрес 203.0.113.32 На этом этапе вы можете указать в своем веб-браузере свое доменное имя и посетить свой веб-сайт! ## Очистить Чтобы избежать взимания платы с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы. Удалите ресурсы балансировки нагрузки: kubectl удалить ingress,service -l app=hello Освобождение зарезервированного статического IP-адреса. После удаления балансировщика нагрузки неиспользуемый, но зарезервированный IP-адрес больше не предоставляется бесплатно и оплачивается по цене неиспользуемого IP-адреса. Выполните следующие команды, чтобы освободить статический IP-ресурс: Если вы использовали Сервис: Вычислительные адреса gcloud удалить helloweb-ip --region us-central1 Если вы использовали Ingress: Вычислительные адреса gcloud удалить helloweb-ip --global - Удалите образец приложения: kubectl удалить -f helloweb-deployment.yaml Подождите, пока балансировщик нагрузки не будет удален, наблюдая за выводом следующей команды. В выходных данных не должно отображаться правило переадресации, которое содержит «helloweb» в своем имени: список правил переадресации вычислений gcloud Удалите кластер контейнеров: Кластеры контейнеров gcloud удалить domain-test ## Что дальше Зарегистрируйте собственное доменное имя через Google Domains Ознакомьтесь с другими руководствами по Kubernetes Engine Ознакомьтесь с эталонными архитектурами, диаграммами, учебными пособиями и рекомендациями по работе с Google Cloud. Загляните в наш Центр облачной архитектуры.