#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'