Konfigurasi SSL Gitea dengan Apache sebagai reverse proxy
Untuk menggunakan registry kontainer di k8s, kita membutuhkannya melalui SSL
Kami ingin menjalankan registry kontainer yang bagus dan aman - untuk mendorong gambar docker ke sana dan klaster kubernetes kami akan menariknya dari registry ini. Maka muncul ide untuk menggunakan gitea melalui ssl.
- Gitea sudah memiliki registry kontainer
- Apache sebagai proxy pengakhiri TLS akan menambahkan HTTPS ke Gitea kami.
- Itu bagaimana dimulainya… CA rot, sertifikat self-signed…
Ketika kita membutuhkan registry di k8s
Sayangnya registry di klaster kubernetes yang dibuat oleh kubespray tidak bekerja untuk saya.
- untuk mendorong ke sana kita perlu membuat tunnel sementara melalui kube-proxy
- setelah mendorong ke sana versi saat ini dari klaster baru saya tidak bisa menarik gambar dari registry internal ini
Setelah menghabiskan beberapa malam yang luar biasa mencoba memperbaikinya, Saya memutuskan hanya menggunakan registry kontainer internal Gitea, hanya perlu mengkonfigurasi akses HTTPS ke sana.
Akan membuatnya publik tetap, sehingga docker dan k8s tidak perlu melakukan login docker apa pun. Mungkin. Mari lihat bagaimana kita pergi.
Menguji apakah itu bekerja
Untuk menguji apakah registry kontainer cocok dengan kita kita ingin mampu
- mendorong gambar ke sana dan
- membuat deployment di k8s dari gambar tersebut
sudo docker pull alpine:3.12.0
sudo docker images
sudo docker tag a24bb4013296 localhost:5000/rg/alpine:version.3.12.0
sudo docker push localhost:5000/rg/alpine:version.3.12.0
Sekarang xed alp1.yaml
atau nano alp1.yaml
tergantung pada mood Anda dan
apiVersion: apps/v1
kind: Deployment
metadata:
name: alp-registry-test
spec:
replicas: 1
selector:
matchLabels:
app: alp-registry-test
template:
metadata:
labels:
app: alp-registry-test
spec:
containers:
- name: alpine-test
image: localhost:5000/rg/lpine:version.3.12.0
imagePullSecrets:
- name: registry-secret
Berikut adalah file ini tersedia untuk diunduh Kemudian membuat deployment ini
kubectl create -f alp1.yaml
kubectl get pods
kubectl describe po alp-registry-test-5f5cb94b97-njsp2
# atau apa pun pod yang dibuat atau tidak dibuat
Ya saya tahu tentang bagian ini
imagePullSecrets:
- name: registry-secret
registry-secret adalah nama dari rahasia yang dibuat oleh kubespray.
Pembersihan
kubectl delete -f alp1.yaml
Bagaimana
Beberapa dokumentasi tersedia di situs Gitea: https-setup
Dan di halaman tersebut: https://docs.gitea.com/administration/reverse-proxies
Langkah 1 - Instalasi Apache dan membuat situs uji sederhana
Instalasi Apache
sudo apt install apache2
Periksa apa yang kita miliki di firewall
sudo ufw status
Jika firewall aktif, pikirkan port mana yang ingin Anda ekspos melalui https dan izinkan. Konfigurasi apache standar adalah
sudo ufw app list
Kita mungkin melihat sesuatu seperti
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
dan untuk mengaktifkan hanya port 443 kita jalankan
sudo ufw allow 'Apache Secure'
baik. sekarang periksa status layanan
sudo systemctl status apache2
Selanjutnya - membuat server virtual sederhana untuk menguji Apache
sudo mkdir /var/www/reg.homelab
sudo chown -R $USER:$USER /var/www/reg.homelab
sudo chmod -R 755 /var/www/reg.homelab
sudo nano /var/www/reg.homelab/index.html
Masukkan
<html>
<head>
<title>Selamat datang di reg.homelab!</title>
</head>
<body>
<h1>Berhasil! Host virtual reg.homelab sedang bekerja!</h1>
</body>
</html>
kemudian
sudo nano /etc/apache2/sites-available/reg.homelab.conf
dan masukkan
<VirtualHost *:3080>
ServerAdmin webmaster@localhost
ServerName reg.homelab
ServerAlias www.reg.homelab
DocumentRoot /var/www/reg.homelab
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
kemudian nonaktifkan situs default, aktifkan yang ini dan periksa bagaimana kita berjalan
sudo a2ensite reg.homelab.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
lihat sesuatu seperti ini?
AH00558: apache2: Tidak dapat menentukan dengan andal nama domain penuh server, menggunakan 127.0.1.1. Tetapkan direktif 'ServerName' secara global untuk menekan pesan ini
kemudian
sudo nano /etc/apache2/apache2.conf
tambahkan di akhir:
ServerName reg.homelab
Dan ini masih bukan akhir! sekarang perlu menghapus upaya pengikatan port 80
sudo nano /etc/apache2/ports.conf
masukkan
Listen 3030
...
Listen 443
Dan sekarang
sudo systemctl restart apache2
sudo systemctl status apache2
journalctl -xeu apache2.service
curl localhost:3080
BAIK! Sekarang kunjungi
Langkah 2 - Mengubah situs ini menjadi reverse proxy tidak aman :) ke Gitea
sudo nano /etc/apache2/sites-available/reg.homelab.conf
memasukkan
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName reg.homelab
ServerAlias www.reg.homelab
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyRequests off
AllowEncodedSlashes NoDecode
ProxyPass / http://localhost:3000/ nocanon
</VirtualHost>
Lakukan beberapa pengujian konfigurasi
sudo apache2ctl configtest
Tambahkan beberapa modul apache dan restart Apache
sudo a2enmod proxy proxy_http ssl
sudo systemctl restart apache2
sudo systemctl status apache2
BAIK, sekarang kunjungi atau curl
# Ya, masih http, tetapi pada port 443
curl http://localhost:443
http://<Server_IP_Address>:443/
Langkah 3 Sertifikat dan situs self-signed root CA
SweetHome-RootCA.
CANAME=MostImportant-RootCA
# opsional, buat direktori
mkdir $CANAME
cd $CANAME
# menghasilkan kunci pribadi yang dienkripsi aes
openssl genrsa -aes256 -out $CANAME.key 4096
# membuat sertifikat, 1826 hari = 5 tahun
openssl req -x509 -new -nodes -key $CANAME.key -sha256 -days 1826 -out $CANAME.crt -subj '/CN=My Root CA/C=AT/ST=Vienna/L=Vienna/O=MyOrganisation'
# membuat sertifikat untuk layanan
MYCERT=reg.homelab
openssl req -new -nodes -out $MYCERT.csr -newkey rsa:4096 -keyout $MYCERT.key -subj '/CN=My Firewall/C=AT/ST=Vienna/L=Vienna/O=MyOrganisation'
# membuat file v3 ext untuk properti SAN
cat > $MYCERT.v3.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = reg.homelablab
DNS.2 = gitea.homelablab
IP.1 = 192.168.0.10
IP.2 = 192.168.0.11
EOF
openssl x509 -req -in $MYCERT.csr -CA $CANAME.crt -CAkey $CANAME.key -CAcreateserial -out $MYCERT.crt -days 730 -sha256 -extfile $MYCERT.v3.ext
Pada mesin yang terhubung ke gitea / registry
Daftarkan sertifikat root pada linux:
sudo cp MostImportant-RootCA.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
Daftarkan sertifikat root pada windows:
- Klik dua kali file MostImportant-RootCA.crt
- Impor ke pengguna lokal
- Pilih Truster Root CA.
- Ketika diminta tentang mengimpor sertifikat yang tidak terpercaya - klik ya
Ketika git pull di windows mengatakan tentang
Tidak dapat menyelesaikan "tidak dapat mendapatkan sertifikat penerbit lokal...
Anda dapat memberi tahu git untuk menggunakan lapisan jaringan windows dengan
git config --global http.sslbackend schannel
Langkah 4 - Mengamankan proxy dengan sertifikat self-signed
https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
Buat sertifikat self-signed JIKA Anda belum melakukannya di langkah 3
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-subj "/CN=reg.homelab" \
-addext "subjectAltName = DNS:reg.homelab" \
-keyout /etc/ssl/private/apache-selfsigned-reg.homelab.key \
-out /etc/ssl/certs/apache-selfsigned-reg.homelab.crt
Atau hanya ambil dari langkah sebelumnya
sudo cp reg.homelab.crt /etc/ssl/certs/apache-selfsigned-reg.homelab.crt
sudo cp reg.homelab.key /etc/ssl/private/apache-selfsigned-reg.homelab.key
Kembali, buka konfigurasi host virtual
sudo nano /etc/apache2/sites-available/reg.homelab.conf
Tambahkan ke bagian bawah bagian SSL dengan sertifikat
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName reg.homelab
ServerAlias www.reg.homelab
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyRequests off
AllowEncodedSlashes NoDecode
ProxyPass / http://localhost:3000/ nocanon
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned-reg.homelab.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned-reg.homelab.key
</VirtualHost>
Periksa konfigurasi, restart server, periksa status dan kunjungi Gitea kami melalui SSL
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo systemctl status apache2
# pergi ke: http://<Server_IP_Address>:443/
# atau
curl -k -v https://localhost
browser akan memperingatkan tentang sertifikat self-signed
Koneksi Anda tidak pribadi
Pencuri mungkin sedang mencoba mencuri informasi Anda dari reg.homelab (misalnya, kata sandi, pesan atau kartu kredit). Pelajari lebih lanjut
NET::ERR_CERT_AUTHORITY_INVALID
Tetapi kita akan mengabaikannya, untuk sekarang, sampai kita menggunakan Let’s Encrypt.
Sekarang uji k8s
Lakukan beberapa DNSing…
Pada setiap node k8s:
sudo nano /etc/hosts
dan tambahkan
192.168.18.200 gitea.homelab
192.168.18.200 reg.homelab
Root CA
Pada setiap node k8s:
sudo cp SweetHome-RootCA.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
Dan restart sekarang
Membuat rahasia dengan kredensial registry
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
sudo docker login reg.homelab
kubectl create secret generic regcred --from-file=.dockerconfigjson=/home/rg/.docker/config.json --type=kubernetes.io/dockerconfigjson
atau
kubectl create secret docker-registry regcred --docker-server=your-registry-server --docker-username=your-name --docker-password=your-pword --docker-email=your-email
Gambar docker baru dan deployment k8s
sudo docker pull alpine:3.12.0
sudo docker images
sudo docker tag a24bb4013296 reg.homelab/rg/alpine:version.3.12.0
sudo docker push reg.homelab/rg/alpine:version.3.12.0
Sekarang nano alp2.yaml
, file ini [tersedia]tersedia
apiVersion: apps/v1
kind: Deployment
metadata:
name: alp-registry-test
spec:
replicas: 1
selector:
matchLabels:
app: alp-registry-test
template:
metadata:
labels:
app: alp-registry-test
spec:
containers:
- name: alpine-test
image: reg.homelab/rg/alpine:version.3.12.0
imagePullSecrets:
- name: regcred
Berikut adalah file ini tersedia untuk diunduh: Membuat deployment ini
kubectl create -f alp2.yaml
kubectl get pods
kubectl describe po alp...
Pembersihan
kubectl delete -f alp2.yaml