С точки зрения GKE вы можете попытаться настроить Ingress
ресурс с включенным HTTPS
:
Шаги:
- Создать базу c flask приложение внутри модуля (только для примера)
- Предоставление приложения через объект службы типа
nodePort
- Создание сертификата
- Создание ресурса Ingress
- Тест
- Дополнительная информация (добавлено EDIT)
Создание приложения basi c flask внутри модуля (только для примера)
Ниже приведен скрипт flask, который будет отвечать <h1>Hello!</h1>
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Hello!</h1>"
if __name__ == "__main__":
from waitress import serve
serve(app, host="0.0.0.0", port=8080)
По умолчанию он будет отвечать на порт 8080
.
Ссылка на ответ с приведенным выше сценарием.
Предоставление приложения через сервисный объект типа nodePort
Предполагая, что развертывание настроено правильно с работающим приложением внутри, вы можете предоставить его через сервисный объект типа nodePort
со следующим YAML
определение:
apiVersion: v1
kind: Service
metadata:
name: flask-service
spec:
type: NodePort
selector:
app: ubuntu
ports:
- name: flask-port
protocol: TCP
port: 80
targetPort: 8080
Убедитесь, что:
selector
настроен правильно targetPort
указывает на порт, на котором запущено приложение на
Создание сертификата
Для Ingress
объекта для работы с HTTPS
вам потребуется предоставить сертификат. Вы можете создать его с помощью официальной документации GKE по адресу: Cloud.google.com: управляемые сертификаты
Имейте в виду, что для этого вам потребуется доменное имя.
Создание ресурса Ingress
Ниже приведен пример ресурса Ingress
, который будет направлять ваши запросы в ваше приложение flask:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: flask-ingress
annotations:
networking.gke.io/managed-certificates: flask-certificate
kubernetes.io/ingress.global-static-ip-name: flask-static-ip
spec:
rules:
- host: DOMAIN.NAME
http:
paths:
- path: /
backend:
serviceName: flask-service
servicePort: flask-port
Пожалуйста, укажите c посмотрите часть определения YAML
ниже и измените соответственно вашему случаю:
networking.gke.io/managed-certificates: flask-certificate
kubernetes.io/ingress.global-static-ip-name: flask-static-ip
Пожалуйста, подождите, пока все настроится правильно.
После этого у вас будет доступ к вашему приложению по domain.name
с портами:
В настоящее время Ingress поддерживает только один порт TLS, 443, и предполагает завершение TLS.
- Kubernetes.io: Ingress TLS
Тест
Вы можете проверить, правильно ли сконфигурированы вышеупомянутые шаги:
- , введя https://DOMAIN.NAME в вашем веб-браузере и проверив если он отвечает
Hello
с включенным HTTPS - с помощью инструмента
curl -v https://DOMAIN.NAME
.
Пожалуйста, дайте мне знать, если это решение работает для вас.
Дополнительная информация (добавлено EDIT)
Вы можете попытаться настроить объект службы типа LoadBalancer
, который будет работать на уровне 4, как сказал @Florian в своем ответе.
Пожалуйста, обратитесь к официальной документации: Kubernetes.io: Создать внешний балансировщик нагрузки
Вы также можете использовать Nginx Ingress контроллер и либо: