首页 新闻 搜索 专区 学院

K8s Ingress 如何自动根据主机名中的二级域名匹配 service

0
悬赏园豆:30 [已解决问题] 解决于 2020-02-02 12:28

比如访问 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
dudu的主页 dudu | 高人七级 | 园豆:38819
提问于:2020-01-26 17:19
< >
分享
最佳答案
1

通过 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 服务器地址。
  • 如果 nginx-ingress 与应用部署在不同的 namespace ,proxy_pass 中指定的主机名一定要加后缀 .production.svc.cluster.local(production 是 namespace 名称)。
dudu | 高人七级 |园豆:38819 | 2020-02-02 12:11

这操作还是挺6的 但你这样改的就是全局参数了

too-bug | 园豆:202 (菜鸟二级) | 2020-02-28 09:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册