Проблема заключалась в том, что балансировщик нагрузки GKE выполняет собственные проверки работоспособности. Они смотрят на / по умолчанию и ожидают 200 в ответ. Только когда проверки работоспособности в развертывании / модуле объявляют другой путь, проверка работоспособности балансировщика нагрузки будет выбирать эти пути.
Балансировщик нагрузки предоставляется после применения входного YAML. Любые изменения в развертывании или входе, которые влияют на балансировщик нагрузки, не будут приняты, пока балансировщик нагрузки работает. Это означает, что мне сначала пришлось удалить балансировщик нагрузки, а затем применить YAML для развертывания, обслуживания и входа (затем вход автоматически устанавливает балансировщик нагрузки). Вместо удаления балансировщика нагрузки можно вручную ввести правильный путь (и подождать несколько минут).
Поскольку кажется, что балансировщик нагрузки выполняет проверки работоспособности на каждом открытом порту, я удалил свой порт 2222 и добавил местоположение / работоспособность для каждого блока сервера с портом 80 в nginx с отключенным auth_basi c.
См .: https://cloud.google.com/load-balancing/docs/health-check-concepts и { ссылка } и { ссылка }
Новый nginx .conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name subdomain1.domain.com;
root /usr/share/nginx/html;
index index.html;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd_subdomain1;
location /healthz {
auth_basic off;
allow all;
return 200;
}
}
server {
listen 80;
server_name subdomain2.domain.com;
root /usr/share/nginx/html;
index index.html;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd_subdomain2;
location /healthz {
auth_basic off;
allow all;
return 200;
}
}
server {
listen 80;
server_name domain.com www.domain.com;
root /usr/share/nginx/html;
index index.html;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd_domain;
location /healthz {
auth_basic off;
allow all;
return 200;
}
}
## next block probably not necessary
server {
listen 80;
auth_basic off;
location /healthz {
return 200;
}
}
}
мое новое развертывание. Yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: gcr.io/GOOGLE_CLOUD_PROJECT/my-app
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 80
readinessProbe:
httpGet:
path: /healthz
port: 80