#amazon-web-services #kubernetes #amazon-ec2
Вопрос:
Я создал кластер Kubernetes с экземплярами AWS ec2 с помощью kubeadm, но когда я пытаюсь создать службу с типом LoadBalancer, я получаю статус ожидания внешнего IP-адреса
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 123m
nginx LoadBalancer 10.107.199.170 <pending> 8080:31579/TCP 45m52s
Моя команда «Создать» — это
kubectl expose deployment nginx --port 8080 --target-port 80 --type=LoadBalancer
Я не уверен, что делаю что-то не так.
То, что я ожидаю увидеть,-это ВНЕШНИЙ IP-адрес, указанный для балансировщика нагрузки.
Кто — нибудь сталкивался с этим и успешно решил его, пожалуйста?
Спасибо.
Ответ №1:
Вам необходимо настроить интерфейс между k8s и AWS, который является контроллером ws-cloud-провайдера.
apiVersion: kubeadm.k8s.io/v1beta1
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
cloud-provider: aws
Более подробную информацию можно найти:
- https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/
- https://blog.heptio.com/setting-up-the-kubernetes-aws-cloud-provider-6f0349b512bd
- https://blog.scottlowe.org/2019/02/18/kubernetes-kubeadm-and-the-aws-cloud-provider/
- https://itnext.io/kubernetes-part-2-a-cluster-set-up-on-aws-with-aws-cloud-provider-and-aws-loadbalancer-f02c3509f2c2
Как только вы завершите эту настройку, у вас будет возможность контролировать не только создание AWS LB для каждого сервиса k8s с помощью балансировщика нагрузки.. Но также вы сможете управлять многими вещами с помощью аннотаций.
apiVersion: v1
kind: Service
metadata:
name: example
namespace: kube-system
labels:
run: example
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xx-xxxx-x:xxxxxxxxx:xxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx #replace this value
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
type: LoadBalancer
ports:
- port: 443
targetPort: 5556
protocol: TCP
selector:
app: example
Различные настройки могут быть применены к службе балансировки нагрузки в AWS с помощью аннотаций.