Каков правильный способ установки аннотаций для службы Kubernetes в YAML

#kubernetes #yaml #kubernetes-service

#kubernetes #yaml #kubernetes-service

Вопрос:

Я пытаюсь установить аннотации для своего объекта Service в Kubernetes, но по какой-то причине (даже если мастер k8s принимает мой запрос) аннотации не устанавливаются. Вот мой файл YAML:

 ---
apiVersion: v1
kind: Service
metadata:
  name: myapp
  labels:
    app: myapp
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: 'arn:aws:acm:us-west-2:<redacted>:certificate/<redacted>'
    service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy: 'ELBSecurityPolicy-TLS-1-2-2017-01'
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: 'http'   
    service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: 'app=myapp'
    service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: true
spec:
  type: LoadBalancer
  selector:
    app: myapp-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  

Затем я могу применить файл без ошибок:

 [ben@ubuntu simplenexus.com]$ kc apply -f deploy/k8s/service.yaml
service/myapp created
  

Однако запрос объекта возвращается без каких-либо аннотаций:

 [ben@ubuntu simplenexus.com]$ kc get svc myapp -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"myapp"},"name":"myapp","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":3000}],        "selector":{"app":"myapp-web"},"type":"LoadBalancer"}}
  creationTimestamp: "2019-04-11T16:27:45Z"
  labels:
    app: myapp
  name: myapp
  namespace: default
  resourceVersion: "2085328"
  selfLink: /api/v1/namespaces/default/services/myapp
  uid: <redacted>
spec:
  clusterIP: <redacted>
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32118
    port: 80
    protocol: TCP
    targetPort: 3000
  selector:
    app: myapp-web
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - hostname: <redacted>.us-west-2.elb.amazonaws.com
  

Я могу вручную устанавливать аннотации, и они остаются:

 [ben@ubuntu simplenexus.com]$ kc annotate svc myapp newannot=success
service/myapp annotated
[ben@ubuntu simplenexus.com]$ kc get svc myapp -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"myapp"},"name":"myapp","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":3000}],        "selector":{"app":"myapp-web"},"type":"LoadBalancer"}}
    newannot: success
  creationTimestamp: "2019-04-11T16:27:45Z"
  labels:
    app: myapp
  name: myapp
  namespace: default
  resourceVersion: "2085328"
  selfLink: /api/v1/namespaces/default/services/myapp
  uid: <redacted>
  ...
  

Я делаю это неправильно? Каков правильный способ установки аннотаций для объекта службы Kubernetes в файле YAML?

Комментарии:

1. Попробуйте запустить это через линтер YAML. Возможно, кавычки вокруг ваших значений для аннотаций являются посторонними?

2. Спасибо, мне, вероятно, следовало упомянуть, что я прогнал его kubeyaml.com а также проанализировал его с помощью Ruby и yaml, все проанализировано точно так, как я и ожидал

3. Я создал службу, используя your .yaml , и все аннотации были созданы правильно. Какую версию kubernetes вы используете?

4. @EduardoBaitello Я использую AWS EKS, в настоящее время он находится в версии 1.11. Мой клиент версии 1.14. Как вы думаете, это может что-то изменить?

5. @Freedom_Ben, конечно, может. Взгляните на документы kubernetes : You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master. Using the latest version of kubectl helps avoid unforeseen issues. Попробуйте использовать клиент 1.11. Я предлагаю вам использовать asdf для управления версиями kubectl .

Ответ №1:

Оказывается, вы не можете использовать логические значения в аннотациях, вот текущий отчет об ошибке для него. Значения аннотаций должны быть строками, поэтому вам нужно очистить их, заключив значения в квадратные скобки '...' .

Я развернул ваш YAML, и он работал с:

     service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: 'true'