0

Menginstall private cluster di EKS pada cloud AWS

Menginstall cluster EKS.

menginstall cluster EKS


Disini kita akan menginstall private cluster di EKS, dengan versi kubernetes 1.26 pada region singapore (ap-southeast-1). Cara installnya menggunakan AWS CLI (terminal) dari lokal komputer. Saya menggunakan OS ubuntu. Jika kalian menggunakan windows, harusnya sama saja langkahnya.

Private cluster, artinya cluster hanya bisa diakses dari dalam VPC saja, tidak bisa diakses dari luar. Jadi setelah nanti berhasil install clusternya dari lokal komputer, kita tidak bisa langsung connect ke clusternya dari lokal komputer (menggunakan kubectl). Kita harus gunakan instance EC2 yang berada dalam subnet yang sama dengan clusternya untuk bisa connect. Seperti gambar dibawah:

Pertanyaannya, kenapa harus private cluster?

Karena lebih aman, private cluster hanya bisa diakses dari dalam VPC saja, tidak terekspos secara langsung ke internet.

Prerequisites

  • Ubuntu 22.04 (lokal komputer)
  • AWS CLI 2.8.9



Berikut ringkasan langkah-langkah untuk menginstall EKS di AWS:

  • Buat roles, policy dan user untuk service EKS
  • Setup user di AWS CLI
  • Buat cluster EKS melalui AWS CLI
  • Buat node group
  • Test akses ke cluster EKS


Let’s get started …

Buat roles, policy dan user AWS untuk service EKS

Kita akan buat di role, policy (customer managed policy) dan user di IAM (Identify and Access Management.

Stepnya sebagai berikut:

Buat roles

  • Masuk ke dashboard IAM
  • Pada menu sebelah kiri > Access Management, klik Role
  • Klik tombol Create Role
  • Pada halaman selanjutnya isi
    • Trusted entity type: AWS service
    • Use case: EC2
    • Klik Next
  • Cari policy name: AmazonEKSClusterPolicy, centang policynya, klik next
    *AmazonEKSClusterPolicy merupakan AWS managed policy (policy yang sudah disediakan oleh AWS, kita tinggal pakai saja), klik Next
  • Halaman berikutnya, masukkan
    • Role name: eksClusterRole
    • Klik Create role
  • Role berhasil dibuat

Buat policy (customer managed policy)

Kita perlu buat policy sendiri (custom, istilahnya customer managed policy). Kemudian roles yang sebelumnya sudah kita buat (eksClusterRole) harus dikaitkan ke policy ini.

Cara buat policy sendiri:

  • Pada menu sebelah kiri dashboard IAM > Access Management, klik Policy
  • Klik Create Policy
  • Masukkan policy dalam bentuk JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:PassRole",
                "iam:GetRole"
            ],
            "Resource": [
                "arn:aws:eks:ap-southeast-1:1xxxxxxxxxx:*/*",
                "arn:aws:iam::1xxxxxxxxxx:role/eksClusterRole"
            ]
        }
    ]
}

  • Ganti 1xxxxxxxxxx dengan AWS Account ID kalian, dan eksClusterRole merupakan role yang tadi kita buat, dikaitkan ke policy ini
  • Klik Next
  • Pada halaman berikutnya isi
    • Policy name: EKSByCLIPolicy01
    • Klik Create Policy
  • Customer managed policies berhasil dibuat

Buat user

User ini nantinya bertindak sebagai admin dan bisa mengakses EKS melalui AWS console (website AWS) untuk memanage cluster (tambah node, melihat service kubernetes, logs, scaling node, dll).

Langkah membuat user:

  • Pada menu sebelah kiri dashboard IAM > Access Management, klik Users
  • Pada sebelah kanan klik Create user
  • Muncul halaman create user
    • Masukann username: admin-eks
    • Centang: Provide user access to the AWS Management Console – optional. Ini nanti digunakan agar user bisa login ke website AWS.
    • Klik Next
  • Pilih Attach policies directy pada Permission options
  • Cari EKSByCLIPolicy01 dan centang policynya
  • Klik Next
menginstall cluster EKS
  • Pada halaman selanjutnya klik Create User. Download dan simpan credential usernya (jangan sampai lupa). Credential ini nanti digunakan untuk login ke AWS Console.

  • Klik Return to users list
  • User berhasil dibuat

  • Selanjutnya kita buat credential AWS CLI untuk user tersebut
  • Klik usernamenya, akan masuk ke detail user
  • Klik tab Security Credentials
  • Pada Access Keys klik Create Access Key
  • Akan dibawa kehalaman baru, pilih
    • Use case: Command Line Interface (CLI)
    • Centang I understand the above recommendation and want to proceed to create an access key.
    • Klik Next
  • Masukkan deskripsi: admin-eks CLI, klik Create access key
  • Setelah itu akan terbuat credential CLI nya. Download dan simpan (jangan sampai lupa). Nanti akan digunakan untuk login AWS CLI
  • Klik Done

Setup user di AWS CLI

User yang sudah kita buat tadi (admin-eks) akan kita setup di AWS CLI. Pastikan kalian sudah menginstall AWS CLI di laptop kalian, jika belum bisa lihat video saya di youtube https://www.youtube.com/watch?v=LAdsqc_6BMc

Step men-setup user di AWS CLI:

  • Buka terminal Ubuntu
  • Buat profile user di AWS CLI
aws configure --profile admin-eks
>enter access key
>enter secret key
>region code

*Masukkan profile sesuai dengan nama usernya (admin-eks), lalu sesuaikan access key, secret key dan region dengan file yang sudah didownload tadi

menginstall cluster EKS
  • Kemudian kita test apakah AWS CLI sudah bisa mengakses resource AWS (service EKS). Disini saya akan coba melihat daftar cluster EKS yang sudah terbuat
aws eks list-clusters --profile admin-eks

Disini tampil 2 cluster EKS, karena saya sudah buat 2 sebelumnya. Seharusnya outputnya kosong jika kalian belum punya cluster.


Selanjutnya kita akan buat private cluster EKS melalui AWS CLI


Buat cluster EKS melalui AWS CLI

Jalankan command berikut untuk membuat cluster:

aws eks create-cluster --region ap-southeast-1 --name eks-cluster-test --kubernetes-version 1.26 --role-arn arn:aws:iam::1xxxxxxxxxx:role/eksClusterRole --resources-vpc-config subnetIds=subnet-1xxx,subnet-bxxx,subnet-9xxx,endpointPublicAccess=false,endpointPrivateAccess=true --profile admin-eks

Penjelasan:

  • eks, kita menggunakan service EKS
  • create-cluster, command untuk membuat cluster
  • --region ap-southeast-1, buat cluster EKS di region singapore (region code: ap-southeast-1)
  • --name eks-cluster-test, nama cluster EKSnya
  • --kubernetes-version 1.26, versi kubernetesnya 1.26
  • --role-arn arn:aws:iam::1xxxxxxxxxx:role/eksClusterRole, role yang sudah kita buat diatas tadi. Harap ganti 1xxxxxxxxxx dengan AWS Account ID kalian
  • --resources-vpc-config subnetIds=subnet-1xxx,subnet-bxxx,subnet-9xxx, clusternya mencakup subnet mana saja. Kalian perlu sesuaikan subnetnya
  • endpointPublicAccess=false, cluster EKS tidak bisa diakses dari internet
  • endpointPrivateAccess=true, kubernetes API Endpoint tidak bisa diakses dari internet (command kubectl tidak bisa diakses)
  • --profile admin-eks, AWS CLI menggunakan profile admin-eks

Setelah menjalankan command diatas, kita bisa login ke website AWS menggunakan user admin-eks dengan credentials yang sudah didapatkan tadi dan membuka dashboard EKS. Akan ada 1 cluster yang statusnya Creating.

Proses membuat cluster lumayan lama sekitar 5 menitan. Tunggu saja. Jika sudah selesai statusnya akan Active.

menginstall cluster EKS


Buat node group

Di EKS menggunakan konsep node group. Jadi node/instance yang kita buat berada dalam node group.

Misal kita ingin mengelompokkan node dengan CPU yang bagus, kita bisa buat node group dengan nama Compute-optimized, begitu juga dengan Memory-optimized.

node group pada EKS AWS


Cara membuat node group:

  • Buat roles dengan nama: AmazonEKSNodeRole
  • Kaitkan beberapa policy ke role AmazonEKSNodeRole:
    • AmazonEKSWorkerNodePolicy
    • AmazonEC2ContainerRegistryReadOnly
    • AmazonEKS_CNI_Policy
menginstall cluster EKS, tambah policy AWS
  • Update policy EKSByCLIPolicy01 agar mempunyai akses untuk membuat nodegroup:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:PassRole",
                "iam:GetRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": [
                "arn:aws:eks:ap-southeast-1:1xxxxxxxxxx:*/*",
                "arn:aws:iam::1xxxxxxxxxx:role/eksClusterRole",
                "arn:aws:iam::1xxxxxxxxxx:role/AmazonEKSNodeRole",
               "arn:aws:iam::1xxxxxxxxxx:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:*"
            ],
            "Resource": "*"
        }
    ]
}

*Ganti 1xxxxxxxxxx dengan AWS Account ID kalian. AWSServiceRoleForAmazonEKSNodegroup merupakan Amazon Managed Policy yang sudah disediakan oleh AWS, kita tinggal pakai saja.

  • Pastikan fitur auto-assigning IPv4 sudah aktif pada subnet cluster (Enable auto-assign public IPv4 address). Jika belum silahkan aktifkan di dashboard VPC.

    Step ini wajib, karena kalau fitur ini belum aktif akan menyebabkan error pada saat pembuatan node group EKS (Error: One or more Amazon EC2 Subnets of [subnet-0x, subnet-04x, subnet-07x] for node group default does not automatically assign public IP addresses to instances launched into it.)

  • Jalankan command berikut untuk membuat node group:
aws eks create-nodegroup --cluster-name eks-cluster-test --nodegroup-name compute-optimized --node-role arn:aws:iam::1xxxxxxxxxx:role/AmazonEKSNodeRole --scaling-config minSize=2,maxSize=3,desiredSize=2 --ami-type AL2_x86_64 --capacity-type ON_DEMAND --instance-types c5n.large --disk-size 20 --subnets subnet-1xxx subnet-bxxx subnet-9xxx --profile admin-eks
  • Penjelasan:
    • eks, service EKS
    • create-nodegroup, command untuk membuat node group
    • --cluster-name eks-cluster-test, cluster mana yang ingin ditambahkan node group
    • --nodegroup-name compute-optimized, nama node groupnya
    • arn:aws:iam::1xxxxxxxxxx:role/AmazonEKSNodeRole, node yang dibuat nanti akan menggunakan role ini. Harap ganti 1xxxxxxxxxx dengan AWS Account ID kalian
    • --scaling-config minSize=2,maxSize=3,desiredSize=2, pengaturan scaling nodenya, minSize=2 artinya minimal ada 2 node dalam node group, maxSize=3 artinya maksimal ada 3 node dalam node group, desiredSize=2 artinya ada 2 node yang dibuat ketika pertama kali launch
    • --ami-type AL2_x86_64, Tipe Amazon Machine Image yang digunakan
    • --capacity-type ON_DEMAND, tipe capacitynya on demand (pay as you go)
    • --instance-types c5n.large, tipe instance yang ingin digunakan
    • --disk-size 20, total size disk untuk masing-masing node/instance
    • -subnets subnet-1xxx subnet-bxxx subnet-9xxx, node akan berada pada subnet ini
    • --profile admin-eks, AWS CLI menggunakan profile admin-eks

  • Sekarang kita bisa cek di dashboard EC2, akan ada 2 instance baru dengan tipe c5n.large
menginstall cluster EKS
  • Jika kita cek di dashboard EKS menggunakan user admin-eks, akan terdapat 2 node/instance EC2 dan node group dengan nama compute-optimized
menginstall cluster EKS, node name and node group in EKS dashboard

Bagus, Cluster EKS sudah siap untuk digunakan.

Test akses ke cluster EKS

Langkah terakhir adalah pengetesan. Kita akan test connect ke cluster dari 2 tempat yaitu lokal komputer dan instance EC2 yang berada di subnet yang sama dengan cluster.

Akes cluster dari lokal komputer? tidak bisa!

Seperti yang sudah dijelaskan diawal, cluster ini tidak bisa diakses dari lokal komputer menggunakan command kubectl. Tapi hanya bisa diakses dari dalam subnet yang sama. Namun jika kita ingin mengetesnya, maka kita bisa lakukan hal berikut:

Install dulu kubectl di lokal komputer

sudo snap install kubectl --classic

Dapatkan credential kubectl melalui AWS CLI

aws eks --region ap-southeast-1 update-kubeconfig --name eks-cluster-test --profile admin-eks

Credential disimpan di /home/moko/.kube/config. Sekarang kita tinggal jalankan kubectl. Misal kita ingin melihat list namespacenya maka jalankan command dibawah

kubectl get ns
kubernetes api server couldn't get current server API group list

Hasilnya akan timeout, karena cluster tidak bisa diakses dari lokal komputer.

Akses cluster dari Instance EC2? bisa!

Kita coba akses clusternya dari instance EC2 yang berada pada subnet yang sama dengan clusternya. Jika kalian belum punya instancenya, harap create satu dulu.

Langkah untuk mengakses cluster:

  • Install dulu kubectl di instancenya
sudo snap install kubectl --classic
  • Generate credential kubernetesnya (pastikan kalian sudah menginstall AWS CLI sebelumnya)
aws eks --region ap-southeast-1 update-kubeconfig --name eks-cluster-test --profile admin-eks
  • Kita test cek namespace kubernetes
kubectl get ns
  • Jika outputnya: couldn’t get current server API group list: Get …. dial tcp 172.31.xx.xx:443: i/o timeout itu artinya kubectl tidak bisa mengakses port 443 (kubernetes API server)
  • Pastikan port 443 pada inbound rule security group pada clusternya sudah ditambahkan, jika belum masuk ke detail clusternya (eks-cluster-test):
    • klik tab Networking
    • klik nama security group pada Cluster security group (misal: sg-07xxx)
    • pilih security groupnya
    • pilih tab Inbound rules, klik Edit inbound rules
    • tambahkan port 443 dan sourcenya 172.31.0.0/16 (sesuaikan dengan CIDR VPC kalian).
  • Klik Save rules
  • Coba lagi dapatkan namespace kubernetes:
kubectl get ns
menginstall cluster EKS

Nice. Sekarang sudah bisa diakses.

Sampai sini artinya clusternya sudah bisa diakses menggunakan kubectl. Kalian bisa coba command lain misal, kubectl get nodes, kubectl get serviceaccount, kubectl get svc.


Oke, demikianlah tutorial yang lumayan panjang saya tulis, Menginstall private cluster EKS di cloud AWS. Semoga bermanfaat!

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.