Portal/Notes πŸ“
Cka

Ingress: Basic Auth

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Kita bisa mengamankan setup ingress dengan menambahkan basic auth.

Create Basic Auth Secret

Pertama, kita perlu membuat file basic auth menggunakan htpasswd. Perintah ini akan meminta password dan konfirmasi password, lalu menulis kredensial ke file auth.

➜ htpasswd -c auth admin
New password: 
Re-type new password: 
Adding password for user admin

Kemudian kita buat sebuah secret untuk menyimpan kredensial basic auth. Perintah di bawah ini akan membaca file auth dan membuat secret bernama ingress-auth.

➜ kubectl create secret generic basic-auth --from-file=auth
secret/basic-auth created

Kita bisa melihat dan memvalidasi secret yang baru saja kita buat menggunakan perintah di bawah.

➜ kubectl get secret ingress-auth -o yaml

Itu akan mengeluarkan format yaml untuk secret ingress-auth kita.

apiVersion: v1
data:
  auth: YWRtaW46JGFwcjEkNXo0b1kvY2wkSEVlRFhaam1jSWkvSkF1V0o1L25BMQo=
kind: Secret
metadata:
  creationTimestamp: "2025-02-02T09:36:06Z"
  name: ingress-auth
  namespace: default
  resourceVersion: "933788"
  uid: 09bf23ec-625a-434b-b39a-4dc528a57b2b
type: Opaque

Configure Ingress

Sekarang dengan secret yang sudah siap, kita perlu mengkonfigurasi ingress kita. Tambahkan annotations di bawah ini.

nginx.ingress.kubernetes.io/auth-type: "basic"
nginx.ingress.kubernetes.io/auth-secret: "ingress-auth"
nginx.ingress.kubernetes.io/auth-realm: "Restricted Area"

nginx.ingress.kubernetes.io/auth-type: tipe autentikasi, bisa basic atau digest.

nginx.ingress.kubernetes.io/auth-secret: nama object secret yang berisi username dan password yang baru saja kita buat. Annotation ini juga mendukung referensi secret di namespace lain "namespace/secret_name".

nginx.ingress.kubernetes.io/auth-realm: pesan yang ditampilkan dengan konteks yang sesuai mengapa autentikasi diperlukan.

Ayo apply perubahannya dan test menggunakan curl. Pertama test tanpa username password.

curl --resolve "simple-go.mine:443:127.0.0.1" -i -k https://simple-go.mine
HTTP/2 401 
date: Sun, 02 Feb 2025 09:52:43 GMT
content-type: text/html
content-length: 172
www-authenticate: Basic realm="Restricted Area"

<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx</center>
</body>
</html>

Kita mendapat error 401 Authorization Required untuk request tanpa kredensial basic auth. Kita juga bisa melihat pesan realm di response header.

Selanjutnya test dengan menambahkan basic auth menggunakan -u admin. Perintah curl akan meminta password, masukkan password yang benar dan kita akan melihat response OK.

curl --resolve "simple-go.mine:443:127.0.0.1" -i -k -u admin https://simple-go.mine
Enter host password for user 'admin':
HTTP/2 200 
date: Sun, 02 Feb 2025 09:53:06 GMT
content-type: text/plain; charset=utf-8
content-length: 65

[{"id":1,"content":"Hello!"},{"id":2,"content":"Good Morning!"}]

Kamu bisa coba apa yang terjadi jika memasukkan password yang salah.

References


Edit on GitHub

Last updated on

Ingress: Basic Auth | Faisal Affan