spec.rules[0].http.backend.servicePort:无效值:"80〃:必须包含至少一个字母或数字(a-z,0-9(";,调用NetworkingV1beta1Api.createNamespacedIngress((api 时出错
我使用io.kubernetes:clientjavaapi:12.0.1版本作为gradle中的依赖项
下面是我的入口yaml文件
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: myserver-userid
namespace: myserver
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: userid-myserver
http:
paths:
- backend:
serviceName: myserver
servicePort: 80
tls:
- hosts:
- userid-myserver
secretName: myserver-tls
在下面的行中,我正在创建NetworkingV1beta1Progs对象。
NetworkingV1beta1Ingress codeServerV1Ingress = yaml.loadAs(ingressYamlFile, NetworkingV1beta1Ingress.class);
通过调用下面的api,我得到错误
NetworkingV1beta1Ingress namespacedIngress = networkingV1beta1Api.createNamespacedIngress("myserver", codeServerV1Ingress, "true", null, null);
错误:
spec.rules[0].http.backend.servicePort: Invalid value: "80": must contain at least one letter or number (a-z, 0-9)
我可以看到这个错误与IntOrString类有关,但不确定它为什么会抛出错误和。api调用失败?有人能帮忙吗?
甚至我也尝试过低于的两种方法
approach 1: servicePort: 80
approach 2: servicePort: "80"
我也在谷歌上搜索过现有的问题,但没有一个对我有帮助。
对于初学者来说,v1beta1注释是不推荐使用的,应该使用v1还应指定路径类型。
PathType确定路径匹配的解释,可以是以下值之一:
- Exact:精确匹配URL路径
- 前缀:基于由'/'分割的URL路径前缀进行匹配。匹配是在逐个路径元素的基础上进行的。路径元素引用的是由"/"分隔符分隔的路径中的标签列表。如果每个p都是请求路径p的元素前缀,那么请求就是路径p的匹配。请注意,如果路径的最后一个元素是请求路径中最后一个元件的子串,则它不匹配(例如/foo/bar匹配/foo/bar/baz,但不匹配/foo/parbaz(
- ImplementationSpecific:路径匹配的解释取决于IngressClass。实现可以将其视为单独的PathType,也可以将其与Prefix或Exact路径类型相同。需要实现来支持所有路径类型
最后,后端服务定义已经更改。试试下面的例子:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-router
namespace: example-router
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
#acme.cert-manager.io/http01-edit-in-place: "true"
#acme.cert-manager.io/http01-ingress-class: "nginx"
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- examlpe.com
- www.examlpe.com
secretName: example-tls-secret
rules:
- host: examlpe.com
http:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: backend-service
port:
number: 80
请记住,备份服务和入口必须属于相同的命名空间。
附言:如果您将来要使用CertManager颁发有效证书,前3个注释是必不可少的。
尝试将servicePort和serviceName分隔为service.name和service.port.number或service.port.name例如。后端:服务:名称:myserver端口:编号:80