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



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

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

您似乎计划在单个负载均衡器(==单个Ingress资源(上托管多个域名。如果不是,则此答案不适用。

您可以通过为Ingress配置一长串域名来执行此操作,例如:

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>
}
}
]
}
}
}
]
kubectl patch ingress ${INGRESS_NAME} --type json -p "$(cat patch.json)"

但是我找不到删除它的解决方案。我尝试的是以下补丁;

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

但我只是从 kubectl 返回错误""无效">

怎么了? 我遵循了 https://kubernetes.io/docs/reference/kubectl/jsonpath/中的 jsonPath 语法

相关内容

  • 没有找到相关文章

最新更新