#kubernetes #kubernetes-ingress #nginx-ingress
#kubernetes #kubernetes-вход #nginx-вход
Вопрос:
Я хочу запустить свое приложение внутри кластера kubernetes по протоколу https и выставить его за пределы кластера также по протоколу https. Я создал pod
и предоставил доступ к порту 443
. После этого я создал ClusterIP
службу, которая подключается к pod через порт 443
и также предоставляет доступ к порту 443
. Наконец, я создал приложение, ingress
которое подключается к службе через порт 443
. Я развернул все эти ресурсы, используя helm chart на GKE. Я использую NGINX Ingress
контроллер. Вы можете найти таблицу здесь.
Когда я получаю доступ к приложению внутри кластера по протоколу https, оно работает.
curl https://my-nginx.https-app-64-production --cacert /etc/nginx/ssl/tls.crt
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Но когда я получаю к нему доступ, используя внешний URL, я получаю сообщение об ошибке ниже.
curl https://staging.vs-creator.iotcrawler.eu/
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.9.1</center>
</body>
</html>
Я не могу понять, что происходит не так. Я подозреваю, что это связано с настройкой контроллера входа. Пожалуйста, помогите мне в этом.
Комментарии:
1. какой входной контроллер у вас using…is это nginx?
2. да, nginx-вход
Ответ №1:
Используйте приведенную ниже аннотацию в ingress resource
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
Из документов
С помощью аннотаций внутреннего протокола можно указать, как NGINX должен взаимодействовать с внутренней службой. (Заменяет защищенные серверные части в более старых версиях) Допустимые значения: HTTP, HTTPS, GRPC, GRPCS, AJP и FCGI
По умолчанию NGINX использует HTTP
при пересылке запроса на серверный модуль, что приводит к тому, 400 The plain HTTP request was sent to HTTPS port
что серверный модуль ожидает HTTPS
запроса.