अपाचे के साथ गिटिया SSL रिवर्स प्रॉक्सी के साथ
केंट्रिक रिजिस्ट्री का उपयोग करने के लिए k8s में इसे ssl पर चलाना आवश्यक है।
हम एक सुरक्षित और अच्छा कंटेनर रिजिस्ट्री होस्ट करना चाहते हैं - इसमें डॉकर इमेज डालें और हमारा कुबरनेट्स क्लस्टर इस रिजिस्ट्री से इन्हें खींचेगा।
इसलिए एसएसएल के साथ गिटिया का उपयोग करने के विचार आया।
- गिटिया में पहले से ही कंटेनर रिजिस्ट्री है
- एपैचे एक टीएलएस टर्मिनेटिंग प्रॉक्सी के रूप में अपने गिटिया के लिए एचटीटीपीएस जोड़ेगा।
- इस तरह यह शुरू हुआ… रोट के सीए, स्व-हस्ताक्षरित सर्टिफिकेट…
जब हमें केबीएस में रिजिस्ट्री की आवश्यकता होती है
कष्ट के रूप में, कुबरनेट्स क्लस्टर द्वारा बनाई गई रिजिस्ट्री मेरे लिए काम नहीं करती।
- इसमें डालने के लिए हमें कुबे-प्रॉक्सी के माध्यम से एक अस्थायी ट्यूनल बनाना होगा
- इसमें डालने के बाद मेरे वर्तमान संस्करण के नए क्लस्टर इस आंतरिक रिजिस्ट्री से इमेज खींच नहीं सकता
कुछ अद्भुत दो रातों के बाद इसके सुधार के प्रयास के बाद,
मैंने फैसला किया कि गिटिया के आंतरिक कंटेनर रिजिस्ट्री का उपयोग करें, इसके लिए इसके एचटीटीपीएस एक्सेस को विनिर्देशित करना आवश्यक है।
मैं इसे कोई भी तरह से सार्वजनिक बनाऊंगा, इसलिए डॉकर और केबीएस को कोई भी डॉकर लॉगिन करने की आवश्यकता नहीं होगी।
हो सकता है। चलो देखते हैं कि हम कैसे जाते हैं।
जांच करें कि क्या यह काम कर रहा है
कंटेनर रिजिस्ट्री हमारे लिए उपयुक्त है या नहीं, इसकी जांच करने के लिए हम चाहते हैं कि
- इमेज को इसमें डाल सकें और
- उस इमेज से केबीएस में एक तैयारी बना सकें
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
अब xed alp1.yaml
या nano alp1.yaml
अपने मूड के आधार पर और
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
यह फ़ाइल डाउनलोड के लिए उपलब्ध है
फिर इस तैयारी को बनाने के लिए
kubectl create -f alp1.yaml
kubectl get pods
kubectl describe po alp-registry-test-5f5cb94b97-njsp2
# या जो भी पॉड बन गया या नहीं बना
हां मुझे इस बारे में जानकारी है
imagePullSecrets:
- name: registry-secret
रिजिस्ट्री-सीक्रेट रिजिस्ट्री के लिए कुबेस्प्रे द्वारा बनाए गए सीक्रेट का नाम है।
सफाई
kubectl delete -f alp1.yaml
कैसे
एक बैच दस्तावेज़ उपलब्ध है गिटिया साइट: https-सेटअप
और उस पृष्ठ पर: https://docs.gitea.com/administration/reverse-proxies
चरण 1 - एपैचे इंस्टॉल करें और सरल परीक्षण साइट बनाएं
एपैचे की इंस्टॉल
sudo apt install apache2
अगले चरण में हमारे फ़ायरवॉल में क्या है जांचें
sudo ufw status
अगर फ़ायरवॉल सक्रिय है तो सोचें कि आप किस पोर्ट को एचटीटीपीएस के माध्यम से खोलना चाहते हैं और इसे अनुमति दें।
सामान्य एपैचे कॉन्फ़िगरेशन हैं
sudo ufw app list
हम कुछ ऐसा देख सकते हैं
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
और 443 पोर्ट को एनेबल करने के लिए हम निम्न आदेश देंगे
sudo ufw allow 'Apache Secure'
ठीक। अब सेवा की स्थिति जांचें
sudo systemctl status apache2
अब एपैचे के लिए एक सरल वर्चुअल सर्वर बनाएं
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
इसमें डालें
<html>
<head>
<title>Welcome to reg.homelab!</title>
</head>
<body>
<h1>Success! The reg.homelab virtual host is working!</h1>
</body>
</html>
फिर
sudo nano /etc/apache2/sites-available/reg.homelab.conf
और इसमें डालें
<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>
फिर डिफ़ॉल्ट साइट को अक्टिव करें और इसे एनेबल करें और जांचें कि हम कैसे हैं
sudo a2ensite reg.homelab.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
क्या आप ऐसा देखते हैं?
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
फिर
sudo nano /etc/apache2/apache2.conf
अंत में डालें:
ServerName reg.homelab
और यह अभी भी अंत नहीं है! अब 80 पोर्ट के बांध के प्रयास को हटाना आवश्यक है
sudo nano /etc/apache2/ports.conf
इसमें डालें
Listen 3030
...
Listen 443
अब
sudo systemctl restart apache2
sudo systemctl status apache2
journalctl -xeu apache2.service
curl localhost:3080
ठीक! अब नेविगेट करें
चरण 2 - इस साइट को गिटिया के लिए असुरक्षित रिवर्स प्रॉक्सी के रूप में परिवर्तित करें :)
sudo nano /etc/apache2/sites-available/reg.homelab.conf
इसमें डालें
<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>
कुछ कॉन्फ़िगरेशन जांचें
sudo apache2ctl configtest
कुछ एपैचे मॉड्यूल जोड़ें और एपैचे को रीस्टार्ट करें
sudo a2enmod proxy proxy_http ssl
sudo systemctl restart apache2
sudo systemctl status apache2
ठीक, अब नेविगेट करें या कर्ल
# हां, यह अभी भी एचटीटीपी है, लेकिन 443 पोर्ट पर
curl http://localhost:443
http://<Server_IP_Address>:443/
चरण 3 - स्व-हस्ताक्षरित मूल सीए और साइट सर्टिफिकेट
स्वीटहोम-रूटसीए
CANAME=MostImportant-RootCA
# वैकल्पिक, एक डायरेक्टरी बनाएं
mkdir $CANAME
cd $CANAME
# एएसई एन्क्रिप्टेड प्राइवेट की बनाएं
openssl genrsa -aes256 -out $CANAME.key 4096
# सर्टिफिकेट बनाएं, 1826 दिन = 5 वर्ष
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'
# सेवा के लिए सर्टिफिकेट बनाएं
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'
# एसएएन प्रॉपर्टी के लिए एक व3 एक्सट फ़ाइल बनाएं
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
गिटिया / रिजिस्ट्री के साथ जुड़े मशीनों पर
लिनक्स पर रूट सर्टिफिकेट रजिस्टर करें:
sudo cp MostImportant-RootCA.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
विंडोज़ पर रूट सर्टिफिकेट रजिस्टर करें:
- MostImportant-RootCA.crt फ़ाइल पर डबल क्लिक करें
- स्थानीय उपयोगकर्ता में आयात करें
- ट्रस्टर रूट सीए का चयन करें
- अप्रत्ययित सर्टिफिकेट आयात करने के बारे में प्रश्न प्राप्त करने पर हां क्लिक करें
जब विंडोज़ पर गिट पुल कहता है
Unable to resolve "unable to get local issuer certificate...
आप गिट को विंडोज़ नेटवर्किंग लेयर का उपयोग करने के लिए बता सकते हैं
git config --global http.sslbackend schannel
चरण 4 - प्रॉक्सी को स्व-हस्ताक्षरित सर्टिफिकेट के साथ सुरक्षित करें
https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
अगर चरण 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
या अगले चरण से लें
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
फिर बार बार, वर्चुअल होस्ट कॉन्फ़िगरेशन ओपन करें
sudo nano /etc/apache2/sites-available/reg.homelab.conf
अंत में सर्टिफिकेट के साथ एसएसएल अनुभाग जोड़ें
<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>
कॉन्फ़िगरेशन जांचें, सर्वर को रीस्टार्ट करें, स्थिति जांचें और हमारे गिटिया के एचटीटीपीएस पर जाएं
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo systemctl status apache2
# जाएं: http://<Server_IP_Address>:443/
# या
curl -k -v https://localhost
ब्राउज़र स्व-हस्ताक्षरित सर्टिफिकेट के बारे में चेतावनी देगा
आपका कनेक्शन निजी नहीं है
आक्रमणकारी आपकी जानकारी को reg.homelab से चुरा सकते हैं (उदाहरण के लिए, पासवर्ड, संदेश या क्रेडिट कार्ड)। अधिक जानें
NET::ERR_CERT_AUTHORITY_INVALID
लेकिन हम अभी इसे अनदेखा करेंगे, तब तक हम लेट्स एंक्रिप्ट का उपयोग नहीं करते।
अब केबीएस परीक्षण
कुछ डीएनएसिंग करें…
प्रत्येक केबीएस नोड पर:
sudo nano /etc/hosts
और इसमें डालें
192.168.18.200 gitea.homelab
192.168.18.200 reg.homelab
मूल सीए
प्रत्येक केबीएस नोड पर:
sudo cp SweetHome-RootCA.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
और अब रीस्टार्ट करें
रिजिस्ट्री क्रेडेंशियल्स के साथ सीक्रेट बनाएं
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
या
kubectl create secret docker-registry regcred --docker-server=your-registry-server --docker-username=your-name --docker-password=your-pword --docker-email=your-email
नई डॉकर इमेज और केबीएस तैयारी
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
अब nano alp2.yaml
, फ़ाइल उपलब्ध है
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
यह फ़ाइल डाउनलोड के लिए उपलब्ध है:
फिर इस तैयारी को बनाने के लिए
kubectl create -f alp2.yaml
kubectl get pods
kubectl describe po alp...
सफाई
kubectl delete -f alp2.yaml
उपयोगी लिंक
- गिटिया साइट: https-सेटअप
- https://docs.gitea.com/administration/reverse-proxies
- https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
- https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html