java - 使用 java kubernetes-client 从 kubernetes 入口删除路径
问题描述
我正在尝试从入口规则中删除带有后端的路径,但无法使其正常工作。
这就是我尝试删除它的方式:
// get path to delete
Optional<HTTPIngressPath> pathToDelete = kubernetesClient.extensions().ingresses().withName("my-ingress")
.get()
.getSpec()
.getRules()
.get(0)
.getHttp()
.getPaths().stream()
.filter(path -> path.getBackend().getServiceName().equals(buildServiceNameById(id))).findFirst();
if(!pathToDelete.isPresent()) {
LOGGER.warn("Couldn't determine ingress path for " + buildServiceNameById(id) + ".");
return;
}
kubernetesClient.extensions().ingresses().withName("my-ingress")
.edit()
.editSpec()
.editFirstRule()
.editHttp()
.removeFromPaths(pathToDelete.get())
.endHttp()
.endRule()
.endSpec()
.done();
LOGGER.info("Deleted ingress routing " + pathToDelete.toString());
当我查看日志时,我可以看到它找到了路径并输出:
已删除入口路由 Optional[HTTPIngressPath(backend=IngressBackend(serviceName=my-service-6, servicePort=IntOrString(IntVal=8080, Kind=null, StrVal=null, additionalProperties={}), additionalProperties={}), path=/我的服务/6,附加属性={})]
但是当我描述入口时,我可以看到规则仍然存在:
Name: my-ingress
Namespace: default
Address: someAdress
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
someHost
/ admin:8888 (<none>)
/myservice/6 my-service-6:8080 (<none>)
Annotations:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Success 21m public Successfully applied ingress resource.
Warning ConfigReloadFailure 21m public Failed to apply ingress resource.
Warning ConfigReloadFailure 21m public Failed to apply ingress resource.
Warning ConfigReloadFailure 20m public Failed to apply ingress resource.
Normal Success 18m public Successfully applied ingress resource.
Normal Success 18m public Successfully applied ingress resource.
Normal Success 17m public Successfully applied ingress resource.
Normal Success 16m public Successfully applied ingress resource.
所以我的问题是:如何使用 kubernetes-client-java 动态删除 Ingress 中的路径?我用 kubernetes-client 创建了规则,所以我知道它在理论上是有效的,我只是无法让它再次删除它。
解决方案
您可以像这样删除 igress:
k8sClient.extensions().ingresses().withName("my-ingress").delete();
推荐阅读
- javascript - 调用 rerenderEvents 方法时如何过滤 fullcalendar v4 缓存事件?
- python - ValueError:检查目标时出错:预期 lambda_1 有 1 个维度,但得到的数组形状为 (32, 1)
- vue.js - 到 Neo4j 数据库的 Vue.js 连接器不起作用
- sql - 当SQL中没有匹配条件时创建一个查询循环?
- javascript - ExpressionChangedAfterItHasBeenCheckedError:表达式在检查地理定位 API 后已更改
- javascript - 如何在中间件 NODE JS 中执行查询或调用 api
- html - 选项卡式内容打开多个实例并随时消失
- arrays - 从另一个填充和排列
- java - 如何在cookie中添加isHttpOnly和secure?
- typescript - 是否可以将变量标记为只使用一次?