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 adminKemudian 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 createdKita bisa melihat dan memvalidasi secret yang baru saja kita buat menggunakan perintah di bawah.
β kubectl get secret ingress-auth -o yamlItu 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: OpaqueConfigure 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.mineHTTP/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
- https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
- https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#authentication
- https://httpd.apache.org/docs/2.4/programs/htpasswd.html
Last updated on