Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes nginx路径的值无效_Kubernetes_Google Kubernetes Engine_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Kubernetes nginx路径的值无效

Kubernetes nginx路径的值无效,kubernetes,google-kubernetes-engine,kubernetes-ingress,nginx-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,Nginx Ingress,我的nginx入口如下所示: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: nginx annotations: kubernetes.io/ingress.global-static-ip-name: "gcloud-ip" nginx.ingress.kubernetes.io/rewrite-target: /$1 kubernetes.io/ing

我的nginx入口如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "gcloud-ip"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    kubernetes.io/ingress.class: "nginx"
spec:
  backend:
    serviceName: nginx
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /?(.*)
        backend:
          serviceName: client
          servicePort: 3333
      - path: /api/?(.*)
        backend:
          serviceName: hasura-svc
          servicePort: 8080
我得到:

googleapi: Error 400: Invalid value for field 'resource': '{ "name": "k8s2-um-zhm30g1t-default-nginx-ymq8cimb", "hostRule": [{ "host": ["*"], "pathMatc...'. Invalid path pattern, invalid

我看过很多资料,但这没有意义,因为regexp是有效的,注释是正确的,我相信有人能帮上忙吗?

您正在混合来自两个入口控件的注释。和

注释
kubernetes.io/ingres.global static ip name:
是特定的
GCP入口
,不能与不同的
ingres
控制器一起使用,如
Nginx入口
。在中找不到此批注

在相同的
ingres
对象中,您正在使用
rewrite
注释,该注释是
Nginx ingres
特定的

总之,当您使用来自两个不同控制器的两个注释时,会出现此错误。类似的问题也可以找到

要解决您的问题,您必须决定将使用哪个
入口控制器。请在下面找到两个选项:

GCP入口

如果您想使用
GCP入口
您必须使用不带
重写
功能的路径
NGINX入口
控制器

而不是:

paths:
      - path: /?(.*)
      ...
      - path: /api/?(.*)
使用:

公开应用程序的服务必须是
NodePort
类型。此外,您还需要删除两个批注:

  • nginx.ingres.kubernetes.io/rewrite-target://$1
  • kubernetes.io/ingres.class:“nginx”
NGINX入口

由于注释
kubernetes.io/ingres.global static ip name
特定于谷歌云,因此不能将其与
kubernetes.io/ingres.class:nginx
一起使用

如果您在
GCP
中保留了
静态IP
,则应将此IP作为
loadBalancerIP
应用于
Nginx Ingress Controller
中,而不是应用于
Ingress
资源中

我已经描述了如何使用保留的静态IP部署Nginx入口控制器。您可以通过以下链接找到它:

请记住,答案是几个月前的,从那时起回购协议已经改变。对于最新选项,应使用以下命令。请记住将
更改为您的
ReservedIP

$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.service.loadBalancerIP=<YourGlobalIP>,rbac.create=true
旁注

请记住,保留地址必须是
网络服务层:Premium
,并且必须具有与群集相同的
区域。来自
nginx入口控制器
的流量从中发送的服务应为:
ClusterIP
NodePort

我已经用两个hello world应用程序v1、v2测试了这个场景,IP保留为:
35.222.174.237
on
us-central1

$ kubectl get ing
NAME      HOSTS   ADDRESS          PORTS   AGE
ingress   *       35.222.174.2377   80      27s
$ curl 35.222.174.237/api/something
Hello, world!
Version: 2.0.0
Hostname: second-deployment-5b5bbb7f4-tzsd4
$ curl 35.222.174.237/test
Hello, world!
Version: 1.0.0
Hostname: first-deployment-85b75bf4f9-rtbn9

您是否在群集上设置了nginx入口控制器?这个错误看起来像是GKE试图使用自己的入口控制器来处理入口,该控制器不支持regexp。嘿,是的,我让nginx运行,并且注释将入口注册到nginx
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /?(.*)
        backend:
          serviceName: first-service
          servicePort: 81
      - path: /api/?(.*)
        backend:
          serviceName: second-service
          servicePort: 82
$ kubectl get ing
NAME      HOSTS   ADDRESS          PORTS   AGE
ingress   *       35.222.174.2377   80      27s
$ curl 35.222.174.237/api/something
Hello, world!
Version: 2.0.0
Hostname: second-deployment-5b5bbb7f4-tzsd4
$ curl 35.222.174.237/test
Hello, world!
Version: 1.0.0
Hostname: first-deployment-85b75bf4f9-rtbn9