Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 从k8s入口动态添加/删除命名主机_Kubernetes_Google Cloud Platform_Google Kubernetes Engine_Kubernetes Ingress - Fatal编程技术网

Kubernetes 从k8s入口动态添加/删除命名主机

Kubernetes 从k8s入口动态添加/删除命名主机,kubernetes,google-cloud-platform,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubernetes Ingress,我正在GKE上建立一个k8s集群。通配符DNS*.server.com将指向入口控制器。在集群内部,将有Web服务器吊舱,每个吊舱公开一个唯一的服务。入口控制器将使用服务器名称路由到各种服务 服务器几乎每天都会被创建和销毁。我想知道是否有一种方法可以在不编辑整个命名服务器列表的情况下从入口控制器中添加和删除命名服务器 看起来您正计划在一个负载平衡器上承载多个域名(=singleingresresource)。如果不是,这个答案不适用 您可以通过使用一长串域名来配置入口,如: spec: ru

我正在GKE上建立一个k8s集群。通配符DNS
*.server.com
将指向入口控制器。在集群内部,将有Web服务器吊舱,每个吊舱公开一个唯一的服务。入口控制器将使用服务器名称路由到各种服务


服务器几乎每天都会被创建和销毁。我想知道是否有一种方法可以在不编辑整个命名服务器列表的情况下从入口控制器中添加和删除命名服务器

看起来您正计划在一个负载平衡器上承载多个域名(=single
ingres
resource)。如果不是,这个答案不适用

您可以通过使用一长串域名来配置
入口
,如:

spec:
  rules:
  - host: cats.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: cats
          servicePort: 8080
  - host: dogs.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: dogs
          servicePort: 8080
  - [...]
如果这是您的意图,如果不编辑整个列表并每次将其应用于集群,则无法执行此操作

您可以构建一个工具来构造此清单文件,然后应用更改。入口控制器足够智能,如果现有域仍在列表中,则不会出现停机


但是,从列表中删除的域也将从负载平衡器的URL映射中删除,因此停止接受流量。

我找到了一个解决方案,通过执行以下修补程序将规则添加到入口:

[
  {
    "op": "add",
    "path": "/spec/rules/-",
    "value": {
      "host": "<HOST>",
      "http": {
        "paths": [
          {
            "path": "/*",
            "backend": {
              "serviceName": "<SERVICE_NAME>",
              "servicePort": <PORT>
            }
          }
        ]
      }
    }
  }
]
但是我找不到解决办法来移除它。我试过的是下面的补丁

[
  {
    "op": "remove",
    "path": '{.spec.rules[?(@.host=="<HOST>")]}'
  }
]

[
{
“op”:“删除”,
“路径”:“{.spec.rules[?(@.host==”“)]}”
}
]
但我刚从kubectl那里得到错误“the”“is invalid”

怎么了?
我遵循了

中的jsonPath语法,我猜您计划使用入口资源,根据路径将流量重定向到不同的服务。当您添加一个新的服务时,您想向入口资源添加一个新的“路径”,并且您想知道最好的方法吗?我考虑过使用
kubectl补丁
,但是入口的
patchStrategy
似乎是
replace
。我试图将新主机添加到现有列表中,但它替换了现有列表。GKE文档说明:无论何时通过入口配置任何HTTP(S)负载平衡器,都不能手动更改或更新HTTP(S)负载平衡器的配置。也就是说,您不能编辑负载平衡器的任何组件,包括目标代理、URL映射和后端服务。您所做的任何更改都会被GKE覆盖。您可以添加到清单文件的域的数量是否有限制?假设我有一千个域名。我可以在该文件中列出1000个域吗?您应该阅读ingress gce和Google Cloud HTTPS负载平衡器的限制。在这里您可以找到有关限制的信息: