nginx - Kubernetes-在一个Ingress中进行多种配置

标签 nginx kubernetes kubernetes-ingress

我在同一Kubernetes集群中运行了不同的应用程序。
我希望多个域访问我的Kubernetes集群并根据该域进行重定向。
对于每个域,我想要不同的注释/配置。
没有注释,我会有一个入口部署,例如:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: frontdoor
  namespace: myapps
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  type: LoadBalancer
  tls:
    - hosts:
        - foo.bar.dev
        - bar.foo.dev
      secretName: tls-secret
  rules:
    - host: foo.bar.dev
      http:
        paths:
          - backend:
              serviceName: foobar
              servicePort: 9000
            path: /(.*)
    - host: bar.foo.dev
      http:
        paths:
          - backend:
              serviceName: varfoo
              servicePort: 80
            path: /(.*)
但是他们需要具有多种配置,例如,一种需要具有以下注释
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "PHPSESSID"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
还有一个会拥有这个
    nginx.ingress.kubernetes.io/backend-protocol: "FCGI"
    nginx.ingress.kubernetes.io/fastcgi-index: "index.php"
    nginx.ingress.kubernetes.io/fastcgi-params-configmap: "example-cm"
那些配置不兼容,我找不到按主机指定配置的方法。
我也明白,不可能有2个Ingress服务外部HTTP请求。
那我不明白/做错了什么?

最佳答案

I also understand that it's impossible to have 2 Ingress serving External HTTP request


我不确定您在哪里找到这个,但是您完全可以做到。
您应该能够创建两个单独的入口对象,如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: frontdoor-bar
  namespace: myapps
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod

    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "PHPSESSID"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"

spec:
  type: LoadBalancer
  tls:
    - hosts:
        - bar.foo.dev
      secretName: tls-secret-bar
  rules:
    - host: bar.foo.dev
      http:
        paths:
          - backend:
              serviceName: barfoo
              servicePort: 80
            path: /(.*)

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: frontdoor-foo
  namespace: myapps
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod

    nginx.ingress.kubernetes.io/backend-protocol: "FCGI"
    nginx.ingress.kubernetes.io/fastcgi-index: "index.php"
    nginx.ingress.kubernetes.io/fastcgi-params-configmap: "example-cm"

spec:
  type: LoadBalancer
  tls:
    - hosts:
        - foo.bar.dev
      secretName: tls-secret-foo
  rules:
    - host: foo.bar.dev
      http:
        paths:
          - backend:
              serviceName: foobar
              servicePort: 9000
            path: /(.*)
这是一种完全有效的入口配置,并且很可能是唯一可以解决您问题的有效配置。
每个入口对象配置一个域。

关于nginx - Kubernetes-在一个Ingress中进行多种配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64541808/

相关文章:

c# - 在我的 Rpi 上加载资源时出现 SSL 问题

kubernetes - Kubernetes Traefik,保持服务不可用

node.js - 使用 Nginx 和路由将端口转发到 Node.js 应用程序

python - 无法在 django 中使用 nginx 提供静态文件

apache - Kubernetes/OC ConfigMap 与 git 中的 config 和容器中的进程以观察变化

docker - 在不使用任何公共(public)/私有(private) docker 注册表的情况下创建 kubernetes pod

go - 在 Kubernetes 上安装证书

kubernetes - 在centos 7上安装kubernetes

nginx - 建议为Kubernetes 1.17推荐哪个版本的Nginx Ingress Controller

kubernetes - 在其他 namespace 中运行的kubernetes环境中的Ping API