繁体   English   中英

nginx 配置到 kubernetes ingress-nginx

[英]nginx config to kubernetes ingress-nginx

我有具有以下配置的 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;
        }

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

这个例子可能不会像你的 nginx.conf 那样做所有事情,它只会将流量路由到正确的后端(Kubernetes 服务),并使用缩短的 URL:
例如:

from:  http://some.nice.server.com/api/v1/something1/blabla   
to:    http://some.nice.server.com/blabla  

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

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

你可以找到指导如何手动创建一个Kubernetes秘密与您的网站的证书在这里或如何使用LetsEncrypt服务用于此目的这里

文档指定用于部署 ingress-nginx 入口控制器的 ingress-nginx mandatory.yaml .yaml 文件在默认的ingress-nginx命名空间中设置了一个具有默认名称nginx-configuration的 k8s ConfigMap。 请参阅部署文档中指向必需文件的链接。

然后,要配置您的 nginx conf 文件,您只需将键值对添加到nginx-configuration ConfigMap。 可用的设置及其键位于ConfigMaps上的 ingress-nginx 文档中。 我发现它们与 nginx 配置名称(略有不同)不同。

这是一个示例 ConfigMap.yaml 文件,其中包含我为控制器所做的一些设置。

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  # This tells the nginx config to look at a different ConfigMap named custom-headers if you have a lot of headers you want to set
  proxy-set-headers: "ingress-nginx/custom-headers"

  # Suggested changes for interacting with Cloud service load balancing
  proxy-read-timeout: "660"  
  proxy-send-timeout: "660"

  # Custom code that can be referenced
  http-snippet: "map $http_upgrade $connection_upgrade {
                     default 'upgrade';
                     ''      close;
                }"
  proxy-body-size: "500m"

当您发布 ConfigMap 时,ingress-nginx 足够智能,可以即时更新,无需停机。 您应该会看到日志中记录的更改。

最后,最好通过查看动态生成的 nginx.conf 文件来检查您的配置设置是否处于活动状态。 我喜欢使用文档中描述kubectl 插件来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM