Jak połączyć się do klastra Amazon EKS

Jak połączyć się do klastra Amazon EKS

Artykuł ukazał się pierwotnie na blogu Chmurowiska.

Uruchomiłeś właśnie swój pierwszy klaster Kubernetes w usłudze Amazon EKS i pewnie zastanawiasz się co dalej. W konsoli samej usługi nie za bardzo można coś zrobić. Jest tam trochę informacji i praktycznie nic poza tym.

Klastrami Kubernetesa zarządzamy za pomocą narzędzie kubectl. W artykule pokażę w jaki sposób skonfigurować maszynę z Linuxem na pokładzie, aby móc zarządzać klastrem w EKS.

Instalujemy narzędzia

Na początek jedna uwaga. Wszystkie urle do instalowanych narzędzi są aktualne w momencie gdy piszę ten tekst. Jeżeli będziecie czytali ten artykuł za jakiś czas, sprawdźcie proszę czy nie ma dostępnych nowszych wersji

Narzędzie kubectl zainstalujemy w wersji „amazonowej”.

curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.13.7/2019-06-11/bin/linux/amd64/kubectl

Czynimy nasz plik wykonywalnym.

chmod +x ./kubectl

Kopiujmy go sobie w jakieś wygodniejsze miejsce i ułatwiemy sobie życie dodając go do przeszukiwanych miejsc.

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

Dodamy go sobie jeszcze do pliku .bashrc, dzięki temu, po ponownym uruchomieniu maszyny, będzie nadal dostępny.

echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

Sprawdzamy czy wszystko działa.

kubectl version --client --short

I jeżeli wszystko jest w porządku, możemy zainstalować AWS IAM Authenticator. To narzędzie, którego Kubernetes używa do autentykacji w AWS.

Polecania wykonujemy po kolei, podobnie do instalacji kubectl.

curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.13.7/2019-06-11/bin/linux/amd64/aws-iam-authenticator
chmod +x ./aws-iam-authenticator
mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

Sprawdzamy oczywiście, czy authenticator działa.

aws-iam-authenticator help

Konfigurujemy

W następnym kroku musimy stworzyć kubeconfig.

AWS IAM Authenticator for Kubernetes używa między innymi komendy aws sts get-caller-identity. Jest ona dostępna w CLI od wersji 1.16.156. Warto więc sprawdzić, którę wersją AWS CLI dysponujemy

aws --version

i ewentualnie wykonać update:

pip install awscli --upgrade --user

Zakładam, że CLI jest skonfigurowane. Jeżeli nie to teraz jest na to ostatni moment. Zakładam, że mamy nowy klaster EKS, użytkownikiem musi być więc ten, który ten klaster stworzył. To ważne.

aws configure

I dodajemy w końcu nowy kontekst za pomocą polecenia:

aws eks --region region update-kubeconfig --name clustername

W moim przypadku wyglądało to tak

Stworzyliśmy plik ~/.kube/config Ciekawi mogą do niego zajrzeć:

cat ~/.kube/config

Możemy już spróbować jakiejś interakcji z naszym klasterm EKS. Spróbujemy pobrać listę serwisów:

kubectl get services --all-namespaces

Działa? Działa. 🙂

Dodajemy innych użytkowników klastra

Dodajmy teraz kolejnego użytkownika do naszego klastra. Ktoś musi nam przecież pomóc w codziennej pracy.

Aby to zrobić musimy wyedytować aws-auth ConfigMap. Jest to konfiguracja, którą EKS wykorzystuje do autentykacji. Zarówno dla użytkowników jak i ról.

Spróbujmy na początek podejrzeć tą konfig mapę:

kubectl describe configmap -n kube-system aws-auth

Jeżeli nie dodawaliście jeszcze do swojego klastra żadnych nodów ani użytkowników to wynik będzie prawdopodobnie taki: Error from server (NotFound): configmaps „aws-auth” not found.

Jeżeli tak jest, to musimy ściągnąć taką konfigurację i lekko ją wyedytować. Ściągamy plik

curl -o aws-auth-cm.yaml https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/aws-auth-cm.yaml

W pliku

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: <ARN of instance role (not instance profile)>
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

musimy wpisać ARN do roli, którą będą przyjmowały nody naszego klastra. Przypomnę tylko, że jest to rola z następującymi politykami:

  • AmazonEKSWorkerNodePolicy,
  • AmazonEKSCNIPolicy,
  • AmazonEC2ContainerRegistryReadOnly.

Po zapisaniu zmian, musimy oczywiście zaaplikować zmiany na naszym klastrze:

kubectl apply -f aws-auth-cm.yaml

Teraz polecenie

kubectl describe configmap -n kube-system aws-auth

powinno zadziałać.

Aby dodać nowego użytkownika musimy tą mapę wyedytować. Otwieramy ją:

kubectl edit -n kube-system configmap/aws-auth

W sekcji data możemy dodać naszych użytkowników. Potrzebne będą trzy dodatkowe rzeczy w konfiguracji:

  • userarn: ARN użytkownika,
  • username: nazwa użytkownika wewnątrz klastra Kuberenetes,
  • groups: lista grup Kubernetes, do których użytkownik będzie przydzielony.

Wszystkie te dane umieszczamy w sekcji mapUsers. Może jej jeszcze nie być.

U mnie, po edycji, ta część konfiguracji wygląda tak:

Zanim zapiszę zmiany, w drugim terminalu użyję poświadczeń awsowych nowego użytkownika eksadmin i spróbuję pobrać listę serwisów w klastrze.

Jak widać, nic z tego. OK, wracamy do poprzedniego terminala, zapisujemy zmiany w naszej konfiguracji i jeszcze raz oddajemy głos naszemu nowemu administratorowi.

Jak widać, po dodaniu go do konfiguracji klastra EKS, nie ma on już żadnych problemów z podłączeniem się do niego.

Podsumowanie

Amazon EKS jest jeszcze dość słabo powiązany z innymi usługami w Amazon Web Services. Nie ma do niej na przykład żadnych metryk w CloudWatch.

Za pomocą EKS możemy jednak budować standardowe klastry Kubernetesowe i przenieść do AWS swoje rozwiązania.

Początki pracy z EKS mogą być trudne, próg wejścia jest na pewno wyższy niż w przypadku ECS. Dużym plusem jest jednak to, że za całego Mastera odpowiada AWS. Mamy 3 redundantne serwery i 3 etcd. Wszystko się poza tym odpowiednio skaluje.

Warto spróbować i mam nadzieję, że tym artykułem Wam to ułatwiłem.

Comments are closed.