Добрый день. Впервые сталкиваюсь с kubernetes и возможно мой вопрос покажется глупым. У меня есть сервер (Ubuntu 22.04) с установленным microk8s и я пытаюсь настроить конфигурацию для веб-приложения с Nginx. Все запускается нормально и я могу подключиться к серверу напрямую через SSH. Ingress контроллер и приложение находятся в разных неймспейсах. Когда я пытаюсь зайти на сайт, то получаю 503 ошибку. Причем я вижу эти подключения в логах Ingress, но не в webapp.
Мои конфиги:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
revisionHistoryLimit: 3
replicas: 1
selector:
matchLabels:
environment: production
app: myapp
template:
metadata:
labels:
environment: production
app: myapp
spec:
imagePullSecrets:
- name: docker-token
volumes:
- name: vendor-dir
emptyDir: {}
- name: upload-dir
emptyDir: {}
- name: runtime-dir
emptyDir: {}
- name: assets-dir
emptyDir: {}
- name: host-config
configMap:
name: backend-host-config
initContainers:
- name: app-dependencies
image: myimage
imagePullPolicy: Always
command: [ 'sh', '-c', 'composer install --no-interaction --classmap-authoritative' ]
envFrom: &envFrom
- secretRef:
name: backend-env
volumeMounts: &volumeMounts
- mountPath: /var/www/vendor
name: vendor-dir
- mountPath: /var/www/web/upload
name: upload-dir
- mountPath: /var/www/runtime
name: runtime-dir
- name: app-migrations
image: myimage
imagePullPolicy: Always
envFrom: *envFrom
volumeMounts: *volumeMounts
command: [ 'sh', '-c', './yii migrate --interactive=0' ]
- name: app-cache-clear
image: myimage
imagePullPolicy: Always
envFrom: *envFrom
volumeMounts: *volumeMounts
command: [ 'sh', '-c', './yii cache/flush-all --interactive=0' ]
containers:
- name: app
securityContext:
{}
image: myimage
imagePullPolicy: Always
envFrom: *envFrom
volumeMounts: *volumeMounts
ports:
- name: http
containerPort: 80
protocol: TCP
- name: https
containerPort: 443
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
resources:
{}
- name: webapp
image: nginx:alpine
volumeMounts:
- mountPath: /var/www/web/assets
name: assets-dir
- mountPath: /etc/nginx/conf.d
name: host-config
host-config.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: backend-host-config
data:
default.conf: |
server {
root /var/www/web;
index index.php index.html index.htm;
location /health {
return 200;
}
sendfile off;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass localhost:9000;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}
}
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-deployment
labels:
name: myapp
annotations:
kubernetes.io/ingressClassName: public
nginx.ingress.kubernetes.io/backend-protocol: http
nginx.ingress.kubernetes.io/client-body-buffer-size: 1M
nginx.ingress.kubernetes.io/fastcgi-index: index.php
nginx.ingress.kubernetes.io/fastcgi-params-configmap: default/fastcgi-config
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/http2-push-preload: "true"
spec:
rules:
- host: "myapp.site"
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: myapp-deployment
port:
name: http
service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
type: ClusterIP
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
- port: 9000
name: fastcgi
selector:
app: myapp
environment: production
Вот логи, которые записываются при попытке зайти на сайт:
[ip] - - [26/Oct/2023:17:39:48 +0000] "GET / HTTP/1.1" 503 592 "-" [User-Agent] 472 0.000 [default-myapp-deployment-http] [] - - - - 0ac9bd0d9863ce5a065dba8b8b553321
kubectl get service myapp-deploymentNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-deployment ClusterIP 10.152.183.181 <none> 80/TCP,9000/TCP 2d11h
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
myapp-deployment public myapp.site 127.0.0.1 80 4h37m
Во всем этом меня смущает, что external-ip имеет значение "none" и Ingress имеет адрес 127.0.0.1. Перепробовал уже массу вариантов, но приблизиться к решению проблемы с 503 ошибкой пока никак не выходит. Буду рад любым подсказкам.