日志抱怨"extensions/v1beta1 Ingress is deprecated"



我添加了一个入口,如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cheddar
spec:
rules:
- host: cheddar.213.215.191.78.nip.io
http:
paths:
- backend:
service:
name: cheddar
port:
number: 80
path: /
pathType: ImplementationSpecific

但日志抱怨:

W0205 15:14:07.482439       1 warnings.go:67] extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
time="2021-02-05T15:14:07Z" level=info msg="Updated ingress status" namespace=default ingress=cheddar
W0205 15:18:19.104225       1 warnings.go:67] networking.k8s.io/v1beta1 IngressClass is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 IngressClassList

为什么?正确的 yaml 使用是什么? 我目前使用的是 microk8s 1.20

我已经分析了您的问题并得出以下结论:

  1. 入口将起作用,您看到的这些警告只是为了通知您有关可用 API 版本控制的信息。您不必担心这一点。我看到了相同的警告:
<小时 />
@microk8s:~$ kubectl describe ing
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
  1. 至于"为什么"即使你使用apiVersion: networking.k8s.io/v1也会发生这种情况,我找到了以下解释:

这正在按预期工作。创建入口对象时,它可以 通过任何版本读取(服务器处理转换为 请求的版本)。kubectl get ingress是一个模棱两可的请求, 因为它不指示要读取的版本。

当发出不明确的请求时,kubectl 会搜索发现文档 由服务器返回以查找包含 指定的资源。

出于兼容性原因,extensions/v1beta1历来 优先于所有其他 API 版本。现在入口是唯一的 资源仍保留在该组中,并且已弃用并具有 GA 替换,1.20 将优先删除它,以便kubectl get ingressnetworking.k8s.io/v1读取,但 1.19 服务器 仍将遵循历史优先级。

如果要读取特定版本,可以限定 get 请求(如kubectl get ingresses.v1.networking.k8s.io...)或可以 传入清单文件以请求在 文件 (kubectl get -f ing.yaml -o yaml)

长话短说:尽管使用了正确的apiVersion,但已弃用的那个仍然被视为默认的,从而生成您体验的警告。

我还看到最近仍在进行更改,因此我认为它仍在进行中。

我遇到了同样的问题,无法更新订阅发布频道的 k8s 集群.
生成此日志警告的原因之一是外部 dns 的 ClusterRole 定义。外部 dns 根据集群角色中定义的规则不断查询 k8s 集群中的入口

- apiGroups: ["extensions", "networking.k8s.io"]
resources: ["ingresses"] 
verbs: ["get","watch","list"]

在舵手图表中找到 这里

它还查询入口的旧扩展,从而不断生成这些日志。请更新证书管理器。

最新更新