Ingress: TLS
Versi Bahasa Indonesia. Baca dalam Bahasa Inggris
Untuk mengamankan Ingress (HTTPS), kita bisa melakukannya dengan menentukan Secret yang berisi private key dan certificate TLS.
Untuk production server, kita harus menggunakan TLS certificate yang valid dari Certificate Authority seperti letsencrypt.org, Cloudflare, dan lain-lain.
Generate Self-Signed Certificate
Untuk setup lokal, kita bisa generate self-signed certificate.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout tls.key -out tls.crt -subj "/CN=simple-go.mine/O=simple-org"Create kubernetes secret
Ada dua cara untuk membuat TLS secret. Pertama dengan menggunakan file yaml seperti ini.
apiVersion: v1
kind: Secret
metadata:
name: secret-tls
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded certificate>
tls.key: <base64-encoded key>Atau dengan menggunakan kubectl, dan saya lebih suka yang ini karena lebih praktis. Jadi mari kita buat tls secret.
β kubectl create secret tls simple-tls --cert=tls.crt --key=tls.key
secret/simple-tls createdSeperti biasa, cek menggunakan perintah kubectl get.
β kubectl get secret
NAME TYPE DATA AGE
postgres-secret Opaque 2 42h
simple-tls kubernetes.io/tls 2 7sSetup Ingress TLS
Sekarang kita sudah punya tls secret. Kita bisa update definisi ingress sebelumnya untuk menggunakan TLS secret yang baru saja kita buat. Tambahkan konfigurasi tls berikut di dalam bagian spec.
tls:
- hosts:
- simple-go.mine
secretName: simple-tlsAyo apply dan validasi.
β kubectl apply -f ingress.yaml
ingress.networking.k8s.io/simple-ingress configuredβ kubectl describe ingress simple-ingress
Name: simple-ingress
Labels: <none>
Namespace: default
Address: 192.168.49.2
Ingress Class: nginx
Default backend: <default>
TLS:
simple-tls terminates simple-go.mine
Rules:
Host Path Backends
---- ---- --------
simple-go.mine
/ simple-go:8080 (10.244.0.88:8080,10.244.0.89:8080,10.244.0.90:8080)
Annotations: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 15s (x3 over 7h1m) nginx-ingress-controller Scheduled for syncSetelah ingress kita di-update, kita bisa test menggunakan curl yang sama seperti halaman sebelumnya.
β curl --resolve "simple-go.mine:80:127.0.0.1" -i http://simple-go.mine
HTTP/1.1 308 Permanent Redirect
Date: Fri, 31 Jan 2025 10:39:16 GMT
Content-Type: text/html
Content-Length: 164
Connection: keep-alive
Location: https://simple-go.mine
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx</center>
</body>
</html>Seperti yang bisa kita lihat di atas, request di-redirect ke https yaitu port 443.
Sekarang coba curl menggunakan https ke port 443. Kali ini kita tambahkan -k atau --insecure untuk mengizinkan koneksi yang tidak aman karena kita menggunakan self-signed certificate. Jika tidak, kita akan mendapatkan error failed to verify certificate.
β curl --resolve "simple-go.mine:443:127.0.0.1" -i -k https://simple-go.mine
HTTP/2 200
date: Fri, 31 Jan 2025 10:42:35 GMT
content-type: text/plain; charset=utf-8
content-length: 65
[{"id":1,"content":"Hello!"},{"id":2,"content":"Good Morning!"}]References
- https://kubernetes.io/docs/concepts/services-networking/ingress/
- https://kubernetes.io/docs/concepts/configuration/secret/
Last updated on