kubernetes 入口规则不起作用

hc2pp10m  于 2023-04-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(143)

我使用GCE并尝试通过ingress公开应用程序。但是路径规则不起作用。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: front-ingress
    namespace: {{ .Release.Namespace }}
    annotations:
        {{ if eq .Values.env "dev" }}
        kubernetes.io/ingress.global-static-ip-name: "test-ip"
        {{ else }}
        cloud.google.com/load-balancer-type: "Internal"
        {{ end }}
spec:
    rules:
    -   host: {{ .Values.domain }}
        http:
            paths:
            -   path: /
                backend:
                    serviceName: front-service
                    servicePort: 80
            -   path: /api/
                backend:
                    serviceName: backend-service
                    servicePort: 80

当网站在浏览器中打开时-所有文件返回404。当我通过url打开文件时,我收到:默认后端- 404。如果我通过注解设置默认后端-所有文件加载,但/API请求失败- 404错误。
它能是什么?
主要思想:测试站点子域上的分支。k8s namespace =分支名称。Ingress部署到规则中具有不同主机的每个namespace。全局静态IP通过annotation设置,并在GCE Cloud DNS中设置。
谢谢。
更新:
如果我使用注解kubernetes.io/ingress.class: "gce"和路径:/* 和/API/* - site工作得很好。但是因为我使用全局静态IP,所以我不能为每个IP创建多个入口。如果我使用kubernetes.io/ingress.class: "nginx"- site返回错误:default backend - 404

5kgi1eie

5kgi1eie1#

实际上,您可以使用相同的外部IP地址创建多个入口。您只需确保它们处于不同的主机(或主机名规则)下,因此路径不会相互干扰。每个主机都代表nginx配置中的server {}块,具有唯一的server_name
入口1:

spec:
    rules:
    -   host: host1.domain1
        http:
            paths:
            -   path: /
                backend:
                    serviceName: front-service1
                    servicePort: 80
            -   path: /api/
                backend:
                    serviceName: backend-service1
                    servicePort: 80

入口2:

-   host: host2.domain2
        http:
            paths:
            -   path: /
                backend:
                    serviceName: front-service2
                    servicePort: 80
            -   path: /api/
                backend:
                    serviceName: backend-service2
                    servicePort: 80

如果你想使用一个externalIP,它仍然是可行的,但你只需要使用一个单独的ingress控制器与不同的ingress类名。例如,对于nginx ingress controller,你可以使用--ingress-class选项:

此外,如果您没有在第一个入口控制器中指定--ingress-class,则必须对其进行配置,否则就像选项所说的那样,第一个入口将满足所有类。

相关问题