日志抱怨“extensions/v1beta1 Ingress is deprecated”

Ale*_*lla 15 kubernetes kubernetes-ingress microk8s

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

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
Run Code Online (Sandbox Code Playgroud)

但日志抱怨:

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
Run Code Online (Sandbox Code Playgroud)

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

OhH*_*ark 25

我分析了你的问题,得出以下结论:

  1. Ingress 将工作,您看到的这些警告只是为了通知您可用的 api 版本控制。你不必担心这个。我见过同样的警告:

@microk8s:~$ kubectl describe ing
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Run Code Online (Sandbox Code Playgroud)
  1. 至于“为什么”即使在您使用时也会发生这种情况apiVersion: networking.k8s.io/v1,我找到了以下解释

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

当发出不明确的请求时,kubectl 会搜索服务器返回的发现文档,以找到包含指定资源的第一个组/版本。

出于兼容性原因,extensions/v1beta1历来优于所有其他 api 版本。现在入口是该组中唯一剩余的资源,已弃用并替换为 GA,1.20 将降低其优先级,以便kubectl get ingress从 读取networking.k8s.io/v1,但 1.19 服务器仍将遵循历史优先级。

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

长话短说:尽管使用了正确的apiVersion,但已弃用的仍然被视为默认的,因此会产生您遇到的警告。

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