nginx 配置到 kubernetes ingress-nginx

Pav*_*vel 6 kubernetes

我的 nginx pod 具有以下配置(此处部分显示):

        upstream something-1-8080 {
              server something-1.namespace:8080;
        }
        upstream something-2-8080 {
              server something-2.namespace:8080;
        }

        server {
              proxy_buffering off;
              proxy_redirect off;
              proxy_set_header X-Real-IP $remote_addr;
              access_log /dev/stdout timed_combined;

              listen 443 ssl http2;
              server_name some.server.net;
              location /api/v1/something1 {
                    rewrite ^/api/v1/something1/(.*)$ /$1  break;
                    rewrite ^/api/v1/something1(.*)$ /$1  break;
                    proxy_pass http://something-1-8080;
              }
              location /api/v1/something2 {
                    rewrite ^/api/v1/something2/(.*)$ /$1  break;
                    rewrite ^/api/v1/something2(.*)$ /$1  break;
                    proxy_pass http://something-2-8080;
              }
              location / {
                    proxy_pass  http://some.nice.server.com;

              }
              ssl_certificate     /etc/nginx/secret/tls.crt;
              ssl_certificate_key /etc/nginx/secret/tls.key;
        }
Run Code Online (Sandbox Code Playgroud)

我想将我的 nginx 配置转换为 kubernetes ingress-nginx (入口资源)。有没有办法使用 kubernetes Ingress 资源来实现此配置?阅读 ingress-nginx 文档我还没有找到如何将 proxy_pass 或多次重写映射到 Ingress 资源。我希望参考一些具有类似配置的详细文档或示例。

VAS*_*VAS 0

此示例可能不会像您的 nginx.conf 那样执行所有操作,它仅使用缩短的 URL 将流量路由到正确的后端(Kubernetes 服务):
例如:

from:  http://some.nice.server.com/api/v1/something1/blabla   
to:    http://some.nice.server.com/blabla  
Run Code Online (Sandbox Code Playgroud)

您可能需要根据您的需要使用入口注释对其进行一些调整:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: some-nice-server
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  tls:
  - hosts:
    - "some.nice.server.com"
    secretName: some.nice.server.com
  rules:
  - host: "some.nice.server.com"
    http:
      paths:
      - path: /something1/?(.*)
        backend:
          serviceName: something-1
          servicePort: 8080
      - path: /something2/?(.*)
        backend:
          serviceName: something-2 
          servicePort: 8080
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到如何使用站点证书手动创建 Kubernetes Secret 的指南,或者如何在此处使用 LetsEncrypt 服务来实现此目的