如何在 EKS(kubernetes) 中将前缀+域名转换为 directory/prefix

How to convert a prefix+domain name to a directory/prefix in EKS(kubernetes)

我有 Route53 和 EKS 环境。

我在EKS ingress-controller中写了几个域名,现在需要使用URLs访问各个目录。

如果您有一个域名“example.com”,并且它有一个前缀,您希望将前缀视为域名之后的一个目录。 (例如:main.example.com -> example.com/main) (例如:设置。example.com -> 示例。com/settings)

换句话说,如果你在浏览器的URL中输入“main.example.com”,它将访问正在路由的pod example.com/main。

我在这个问题上花费了大量的工作时间。 你知道解决办法吗?

这是我的“ingress.yaml”的一部分。

enter code here
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "ingress"
  namespace: "public"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/listen-ports: 
      '[{"HTTP":80,"HTTPS": 443}]'
    alb.ingress.kubernetes.io/certificate-arn: ****secret****
nginx.ingress.kubernetes.io/server-snippet: |
  server {
    location / {
      server_name ~^(?<name>[\w-]+)\.example\.com$;
      proxy_pass http://example.com/$name;
      proxy_set_header Host $host;
    }
  }
labels:
  app: develop-app
spec:
 rules:
   - host: main.example.com
     http:
      paths:
       - path: /*
         backend:
           serviceName: "hook"
           servicePort: 8080
   - host: settings.example.com
     http:
      paths:
       - path: /*
         backend:
           serviceName: "hook"
           servicePort: 8080
   - host: example.com
     http:
      paths:
       - path: /*
         backend:
           serviceName: "hook"
           servicePort: 8080

根据您的反馈进行更新,您可能正在寻找的是使用 nginx 服务器块而不是 k8s 入口规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ...
    nginx.ingress.kubernetes.io/server-snippet: |
      server {
        location / {
          server_name ~^(?<name>[\w-]+)\.example\.com$;
          proxy_pass http://<your k8s service>/$name;
          proxy_set_header Host $host;
        }
      }
spec:
  rules:
  - host: main.example.com
  - host: setting.example.com