比如访问 q.cnblogs.com
时自动转发请求到名称为 q-web
的 service ,示意配置文件如下:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cnblogs-ingress
spec:
rules:
- host: {subdomain}.cnblogs.com
http:
paths:
- backend:
serviceName: {subdomain}-web
servicePort: 80
请问如何实现?
通过 k8s ingress 规则无法实现,如果使用的是 nginx ingress controller ,可以通过添加 nginx 转发规则实现。
在 nginx-ingress 的 ConfigMap 中添加下面的配置,实测有效。
apiVersion: v1
data:
http-snippets: |
server {
listen 80;
server_name ~^(?<app>[a-zA-Z0-9-]+)\.cnblogs\.com$;
access_log off;
location / {
resolver 10.96.0.10;
proxy_set_header Host $host;
proxy_pass http://${app}-web.production.svc.cluster.local;
}
}
需要注意的地方:
resolver
指定 k8s 集群的 dns 服务器地址。proxy_pass
中指定的主机名一定要加后缀 .production.svc.cluster.local
(production 是 namespace 名称)。这操作还是挺6的 但你这样改的就是全局参数了