Как преобразовать конфигурацию Nginx.conf в nginx-ingress-controller ingress.yml?

#nginx #kubernetes #nginx-ingress

#nginx #kubernetes #nginx-ingress

Вопрос:

У меня есть nginx.conf со следующей конфигурацией.

 proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout   65;
proxy_send_timeout      65;
proxy_read_timeout      300;
proxy_buffers           4 256k;
proxy_buffer_size       128k;
proxy_busy_buffers_size 256k;
large_client_header_buffers  8 64k;
client_header_buffer_size    64k;
client_max_body_size    1024m;

server {
        listen          443 ssl;
        server_name server1.com;
        ssl_certificate /etc/nginx/ssl/server1.com.crt;
        ssl_certificate_key /etc/nginx/ssl/server1.com.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        proxy_ssl_session_reuse on;
        proxy_ssl_protocols TLSv1.2;

        rewrite_log on;

        proxy_cache_bypass $http_cache_control;
        proxy_ignore_headers "Set-Cookie";
        add_header X-Proxy-Cache $upstream_cache_status;

        location / {
                location = /robots.txt {
                    add_header  Content-Type  text/plain;
                    return 200 "User-agent: *nDisallow: /n";
                }

                location ~ ^/(files/app)  {
                    proxy_pass http://server1.com:31111;
                }

                proxy_pass https://server2.com;
        }
}
 

Я хотел бы перенести свою конфигурацию nginx в kubernetes ingress-nginx ingress.yml. Есть ли способ реализовать эту конфигурацию, используя входные ресурсы kubernetes?

Это мой ingress.yml, который, конечно, не работает и попадает в URL https://server1.com/files/app переходит в несколько перенаправлений и в итоге выдает 502 плохих шлюза.

 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    meta.helm.sh/release-name: my-service
    meta.helm.sh/release-namespace: default
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
  name: my-service
  namespace: default
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/my-service
spec:
  rules:
  - host: server1.com
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 31111
        path: /files/app
        pathType: ImplementationSpecific
 

Комментарии:

1. Какую версию Kubernetes вы использовали и как вы настроили кластер? Вы использовали установку «голого металла» или какого-либо облачного провайдера?

2. @kkopczak Это K8s 1.21 и на cloudprovider. Также обратите внимание, что все остальные правила входа работают нормально, кроме этого. Я подозреваю, что это что-то связанное с обратным прокси или SSL-сертификатом … но я не знаю, как преобразовать этот файл nginx.conf в ingress.yml для Kubernetes.

3. Извините за поздний ответ. Что произойдет, если вы измените порт с listen 443 ssl; на listen 31111 ssl; в nginx.conf?

Ответ №1:

Решением было удаление записей из httpd.conf. мой сервис напрямую обходил запрос, но я также предоставил эти записи в httpd conf, из-за чего он выполнял внутренний цикл. Что касается правила входа. Вышеуказанная конфигурация работала нормально после того, как я удалил связанные правила из httpd.conf.