#google-cloud-platform #google-kubernetes-engine #gcp-load-balancer
# #google-облачная платформа #google-kubernetes-engine #gcp-балансировщик нагрузки
Вопрос:
Мое приложение состоит из play
веб-приложения, развернутого с использованием GKE. Приложение работало нормально (использование Deployment
и Loadbalancer
обслуживание), а затем я решил использовать Ingress
. Я внес следующие изменения, которые сделали приложение недоступным. Я получаю 502
сообщение об ошибке при попытке подключиться к приложению с использованием ingress
IP.
Приложение в своем роде Deployment
.
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
service
С ним связано
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp
ports:
- protocol: TCP
port: 9000 #this service is reachable at this port
targetPort: 9000 #this service will forward the request to correspoding nodes of the service at this port
#type: LoadBalancer
type: NodePort
Затем я применил следующий файл для создания ingress
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: webapp-https-loadbalancer-ingress
annotations:
kubernetes.io/ingress.class: "gce"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: webapp-service
servicePort: 9000
Я вижу, что при запуске есть IP-адрес (который также доступен извне)
kubectl describe ingress webapp-https-loadbalancer-ingress
Name: webapp-https-loadbalancer-ingress
Namespace: default
Address: 3x.yyy.zzz.pq
Default backend: default-http-backend:80 (10.88.0.5:8080)
Rules:
Host Path Backends
---- ---- --------
*
... Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 10m loadbalancer-controller default/webapp-https-loadbalancer-ingress
Normal CREATE 9m10s loadbalancer-controller ip: 3x.yyy.zzz.pq
Но я не могу получить доступ к приложению с помощью https://3x.yyy.zzz.pq
. Я еще не связал домен с IP. Я попытался подключиться с помощью curl
и получил ошибку- 502 bad gateway
ошибка
curl -v 3x.xxx.xxx.xxx
* Expire in 0 ms for 6 (transfer 0x55d4c5258f90)
* Trying 3x.xxx.xxx.xxx...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d4c5258f90)
* Connected to 3x.xxx.xxx.xxx (3x.xxx.xxx.xxx) port 80 (#0)
> GET / HTTP/1.1
> Host: 3x.xxx.xxx.xxx
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 502 Bad Gateway
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Content-Length: 332
< Date: Tue, 22 Dec 2020 22:27:23 GMT
<
<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>
* Connection #0 to host 3x.xxx.xxx.xxx left intact
Ответ №1:
Проблема заключалась в том, что IP-адрес балансировщика нагрузки отсутствовал в списке разрешенных хостов на сервере. В качестве временного исправления я использовал подстановочный знак в конфигурации сервера, чтобы разрешить трафик со всех хостов. Я все еще выясняю, как ограничить его внутренними IP-адресами балансировщика нагрузки
Комментарии:
1. Вы используете кластер на основе VPC или кластер на основе маршрутов?
2. Честно говоря, я не знаю. Я только что создал кластер, используя
GKE
, а затем создалload balancer
. Как я могу узнать, что я использую?3. Вы можете просмотреть это на консоли, в Kubernetes Engine> Кластеры> ВАШ КЛАСТЕР, а на вкладке «Сведения» вы должны увидеть, что маршрутизация трафика на основе VPC включена или отключена.
4. Включен VPC-native (псевдоним IP)
5. Тогда вы сможете добиться этого, разрешив только IP-адреса GFE. cloud.google.com/load-balancing/docs/https#how-connections-work