kubernetes kubectl apply不再允许超过63字符在元数据.标签值

9udxz4iz  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(3)|浏览(199)

我正在尝试在OKE集群(Oracle Cloud Container Engine for Kubernetes)中创建负载均衡器。我正在对文件执行kubectl apply -f,但它给了我这个错误。
服务"servicename"无效:metadata.labels:无效值:"其他代码1.vcn.oc1.iad.xx..xx":不能超过63个字符。
这是yaml文件

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa...xxxxx"
spec:
  type: LoadBalancer
  ports:
  - port: 8100
  selector:
    app: nginx

我发现这个问题是因为service.beta.kubernetes.io/oci-load-balancer-subnet1:的值超过了63个字符。但是我不能改变OCID的值。有解决这个问题的方法吗?

twh00eeo

twh00eeo1#

据我所知,没有解决方案。Kubernetes中的对象名称(您的注解将创建一个具有给定名称的对象)应该符合DNS RFC,即主机名部分〈63个字符。
资料来源:

6ioyuze2

6ioyuze22#

metadata.labels结构具有< 63值长度限制,但metadata.annotations结构没有此限制。请注意,k8s使用metadata.annotation来存储完整JSON,其中包含键(kubectl.kubernetes.io/last-applied-configuration)处最后应用的配置,并且几乎总是超过63字节的限制。
当我把OCID值放在label值上时,我遇到了这个问题,但是当使用annotation值时,不是
例如,这将起作用:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa...xxxxx"
spec:
   ...

但这是预期工作:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa...xxxxx"
spec:
   ...

所以,如果你有这个问题,我建议你仔细检查,如果你真的使用正确的结构,因为你引用。
https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengcreatingloadbalancer.htm#Creating2

kjthegm6

kjthegm63#

注解内尝试如下:

apiVersion: v1
   metadata:
     name: ingress-nginx
     namespace: ingress-nginx
     labels:
       app.kubernetes.io/name: ingress-nginx
       app.kubernetes.io/part-of: ingress-nginx
     annotations:
       service.beta.kubernetes.io/oci-load-balancer-internal: "true"
       service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.iad.xxxxxxxxxxxxxxxxx"
   spec:
     type: LoadBalancer
     selector:
       app.kubernetes.io/name: ingress-nginx
       app.kubernetes.io/part-of: ingress-nginx
     ports:
       - name: http
         port: 80
         targetPort: http
       - name: https
         port: 443
         targetPort: https

相关问题