如何在 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
我有 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