kubernetes 如何在GKE/GCP中配置入口以使多个路径指向同一个后端服务?

y3bcpkx1  于 2023-02-11  发布在  Kubernetes
关注(0)|答案(2)|浏览(162)

我想防止不安全的请求到达我的应用程序运行在GCP GKE与谷歌入口(不是nginx),并尝试使用路径规则来做到这一点。我知道nginx入口可以配置路径使用regex,但我不知道最好的方式来做谷歌入口。现在我只是复制相同的规则,改变路径前缀如下:

spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: my-api-service
            port:
              number: 80
        path: /api
        pathType: Prefix
      - backend:
          service:
            name: my-api-service
            port:
              number: 80
        path: /auth
        pathType: Prefix
      - backend:
          service:
            name: my-api-service
            port:
              number: 80
        path: /admin
        pathType: Prefix

有没有更好的办法?

cs7cruho

cs7cruho1#

本文涵盖了您所寻找的所有内容。由于GKE入口本质上是一个GCP负载均衡器,因此path密钥使用url-map来配置流量并将流量路由到您在配置中指定的位置。正如您在此处所看到的,Path密钥中不允许使用正则表达式。
如果你使用Helm的话,一个选择是使用模板从变量自动生成它。在你的values.yaml文件中给定以下变量:

paths:
 - name: /api
 - name: /admin
 - name: /auth

然后,在入口YAML定义中,您可以执行以下操作:

spec:
  rules:
  - http:
      paths:
{{ range $paths := .Values.paths }}
      - backend:
          service:
            name: my-api-service
            port:
              number: 80
        path: {{ .name }}
        pathType: Prefix
{{ end }}
sczxawaw

sczxawaw2#

GKE中,路径中不允许使用入口regex,因为它使用url-map配置GCP负载平衡器。路径中只允许使用通配符*。我们不能在路径密钥中使用任何其他通配符。
所以你可以这样试试

spec:
      rules:
      - http:
          paths:
          - backend:
              service:
                name: my-api-service
                port:
                  number: 80
            path: /*
            pathType: Prefix

(或)

您可以使用默认后端服务将流量路由到单个服务,如本文档所示

spec:
     defaultBackend:
       service:
        name: my-api-service
        port:
         number: 80

您可以尝试更改注解,如SO中所述。
还有其他类似的SO SO1SO2

相关问题