Kubernetes 升级后 ingress api 变化带来的问题
<p>将 k8s 从 1.17.0 升级到 1.22.3 之后部署 ingress 时报错</p><blockquote>
<p>error: unable to recognize "cnblogs-ingress.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"</p>
</blockquote>
<p>原来从 1.19 开始 ingress api 版本变成了<code>networking.k8s.io/v1</code>,详见 https://github.com/kubernetes/kubernetes/issues/90077</p>
<p>改为 <code>networking.k8s.io/v1</code> 后出现新的报错</p>
<blockquote>
<p>missing required field "pathType" in io.k8s.api.networking.v1.HTTPIngressPath</p>
</blockquote>
<p>我们添加的 ingress 规则多数是基于域名的,之前正常使用的配置如下</p>
<pre><code class="language-yaml">rules:
- host: q.cnblogs.com
http:
paths:
- backend:
serviceName: q-web
servicePort: 80
</code></pre>
<p>而 v1 版必须要指定 <code>path</code> 与 <code>pathType</code>,需要改成下面这样</p>
<pre><code class="language-yaml">rules:
- host: q.cnblogs.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: q-web
servicePort: 80
</code></pre>
<p>我们添加了很多这样的规则,幸好可以通过替换的方式一次修改,不然还挺麻烦,将 <code>- backend:</code> 替换为</p>
<pre><code class="language-yaml">- path: /
pathType: Prefix
backend:
</code></pre>
<p>解决上面的问题后部署又出现新的报错</p>
<blockquote>
<p>unknown field "serviceName" in io.k8s.api.networking.v1.IngressBackend<br>
unknown field "servicePort" in io.k8s.api.networking.v1.IngressBackend</p>
</blockquote>
<p>要将</p>
<pre><code class="language-yaml">backend:
serviceName: q-web
servicePort: 80
</code></pre>
<p>改为</p>
<pre><code class="language-yaml">backend:
service:
name: q-web
port:
number: 80
</code></pre>
<p>继续通过替换进行批量修改,将 <code>serviceName:</code> 替换为</p>
<pre><code class="language-yaml">service:
name:
</code></pre>
<p>将 <code>servicePort:</code> 替换为</p>
<pre><code class="language-yaml">port:
number:
</code></pre>
<p>后来发现还需要在 <code>spec</code> 中添加 <code>ingressClassName: nginx</code>,不然 ingress 规则不会被添加到 nginx.conf 中。</p>
<pre><code class="language-yaml">apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cnblogs-ingress
spec:
ingressClassName: nginx
rules:
- host: q.cnblogs.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: q-web
port:
number: 80
</code></pre>
<p>搞定!</p>
<pre><code class="language-text">ingress.networking.k8s.io/cnblogs-ingress configured
</code></pre>
<p>补充:另外需要在 nginx-ingress 部署配置中</p>
<ul>
<li>将 <code>rbac.authorization.k8s.io/v1beta1</code> 改为 <code>rbac.authorization.k8s.io/v1</code></li>
<li>将 <code>image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0</code> 改为 <code>image: docker.io/bitnami/nginx-ingress-controller:latest</code></li>
</ul><br><br>
来源:https://www.cnblogs.com/dudu/p/15548461.html
頁:
[1]