Kubernetes apiVersion:networking.k8s.io/v1 'Ingress' 问题
Kubernetes apiVersion: networking.k8s.io/v1 Issue with 'Ingress'
在执行 Kubernetes YAML 文件时希望得到您的指导。
我的kubectl版本如下:
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.14", GitCommit:"89182bdd065fbcaffefec691908a739d161efc03", GitTreeState:"clean", BuildDate:"2020-12-18T12:02:35Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
这是从 Kubernetes 站点下载的最新版本
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows
YAML 有
api版本:networking.k8s.io/v1
种类:入口
运行 YAML 上的错误是
no matches for kind "Ingress" in version "networking.k8s.io/v1"
Kubernetes 问题 https://github.com/kubernetes/kubernetes/issues/90077 提到
networking.k8s.io/v1beta1 == 1.14 to 1.18
networking.k8s.io/v1 = 1.19+
所以我想它应该可以正常工作?
我已将 API 版本更改为
apiVersion: extensions/v1beta1 or
apiVersion: networking.k8s.io/v1beta1
但在 YAML 的另一部分失败
backend:
service:
name: {{ template "fullname" $ }}-srv
port:
number: 80
有错误
验证数据时出错:ValidationError(Ingress.spec.rules[0].http.paths[0].backend):io.k8s.api.extensions.[=45= 中的未知字段“服务” ]
我被告知相同的 YAML 在具有相同 kubectl 版本的 macOS 上工作(尽管我无权验证)。但是有没有想过我可能哪里出错了?
谢谢,
普拉巴尔
对于networking.k8s.io/v1beta1
应该是
backend:
serviceName: {{ template "fullname" $ }}-srv
servicePort: 80
如何获取文档:
kubectl explain --api-version=networking.k8s.io/v1beta1 ingress.spec.rules.http.paths.backend
您可以使用以下命令检查版本 networking.k8s.io/v1
中的种类 Ingress
在您的集群中是否可用。
kubectl api-resources #List the API resources that are available.
kubectl api-versions #List the API versions that are available.
您可以 运行 helm create mychart
并比较您的图表与生成的图表之间的差异。
(这是一个快速的解决方案,但是,最好的方法是阅读文档)
我想补充一点,根据 K8 deprecation guide,networking.k8s.io/v1beta1
API 版本的 Ingress
从 v1.22 开始不再提供。
变化包括:
- 后端
serviceName
字段重命名为 service.name
- 数字后端
servicePort
字段重命名为 service.port.number
- 字符串后端
servicePort
字段重命名为 service.port.name
现在每个指定路径都需要 pathType
。选项有 Prefix、Exact 和 ImplementationSpecific。
意味着我们需要进行以下更改才能从这里开始:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: stackoverflw
namespace: stacker
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: stacker
servicePort: 80
对此(示例):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: stackoverflw
namespace: stacker
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: stacker
port:
number: 80
在执行 Kubernetes YAML 文件时希望得到您的指导。 我的kubectl版本如下:
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.14", GitCommit:"89182bdd065fbcaffefec691908a739d161efc03", GitTreeState:"clean", BuildDate:"2020-12-18T12:02:35Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
这是从 Kubernetes 站点下载的最新版本 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows
YAML 有 api版本:networking.k8s.io/v1 种类:入口 运行 YAML 上的错误是
no matches for kind "Ingress" in version "networking.k8s.io/v1"
Kubernetes 问题 https://github.com/kubernetes/kubernetes/issues/90077 提到
networking.k8s.io/v1beta1 == 1.14 to 1.18
networking.k8s.io/v1 = 1.19+
所以我想它应该可以正常工作?
我已将 API 版本更改为
apiVersion: extensions/v1beta1 or
apiVersion: networking.k8s.io/v1beta1
但在 YAML 的另一部分失败
backend:
service:
name: {{ template "fullname" $ }}-srv
port:
number: 80
有错误
验证数据时出错:ValidationError(Ingress.spec.rules[0].http.paths[0].backend):io.k8s.api.extensions.[=45= 中的未知字段“服务” ]
我被告知相同的 YAML 在具有相同 kubectl 版本的 macOS 上工作(尽管我无权验证)。但是有没有想过我可能哪里出错了?
谢谢, 普拉巴尔
对于networking.k8s.io/v1beta1
应该是
backend:
serviceName: {{ template "fullname" $ }}-srv
servicePort: 80
如何获取文档:
kubectl explain --api-version=networking.k8s.io/v1beta1 ingress.spec.rules.http.paths.backend
您可以使用以下命令检查版本 networking.k8s.io/v1
中的种类 Ingress
在您的集群中是否可用。
kubectl api-resources #List the API resources that are available.
kubectl api-versions #List the API versions that are available.
您可以 运行 helm create mychart
并比较您的图表与生成的图表之间的差异。
(这是一个快速的解决方案,但是,最好的方法是阅读文档)
我想补充一点,根据 K8 deprecation guide,networking.k8s.io/v1beta1
API 版本的 Ingress
从 v1.22 开始不再提供。
变化包括:
- 后端
serviceName
字段重命名为service.name
- 数字后端
servicePort
字段重命名为service.port.number
- 字符串后端
servicePort
字段重命名为service.port.name
现在每个指定路径都需要 pathType
。选项有 Prefix、Exact 和 ImplementationSpecific。
意味着我们需要进行以下更改才能从这里开始:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: stackoverflw
namespace: stacker
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: stacker
servicePort: 80
对此(示例):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: stackoverflw
namespace: stacker
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: stacker
port:
number: 80