अपाचे के साथ गिटिया SSL रिवर्स प्रॉक्सी के साथ

केंट्रिक रिजिस्ट्री का उपयोग करने के लिए k8s में इसे ssl पर चलाना आवश्यक है।

Page content

हम एक सुरक्षित और अच्छा कंटेनर रिजिस्ट्री होस्ट करना चाहते हैं - इसमें डॉकर इमेज डालें और हमारा कुबरनेट्स क्लस्टर इस रिजिस्ट्री से इन्हें खींचेगा।
इसलिए एसएसएल के साथ गिटिया का उपयोग करने के विचार आया।

  1. गिटिया में पहले से ही कंटेनर रिजिस्ट्री है
  2. एपैचे एक टीएलएस टर्मिनेटिंग प्रॉक्सी के रूप में अपने गिटिया के लिए एचटीटीपीएस जोड़ेगा।
  3. इस तरह यह शुरू हुआ… रोट के सीए, स्व-हस्ताक्षरित सर्टिफिकेट…

हर रिजिस्ट्री के अपने रहस्य होते हैं

जब हमें केबीएस में रिजिस्ट्री की आवश्यकता होती है

कष्ट के रूप में, कुबरनेट्स क्लस्टर द्वारा बनाई गई रिजिस्ट्री मेरे लिए काम नहीं करती।

  • इसमें डालने के लिए हमें कुबे-प्रॉक्सी के माध्यम से एक अस्थायी ट्यूनल बनाना होगा
  • इसमें डालने के बाद मेरे वर्तमान संस्करण के नए क्लस्टर इस आंतरिक रिजिस्ट्री से इमेज खींच नहीं सकता

कुछ अद्भुत दो रातों के बाद इसके सुधार के प्रयास के बाद,
मैंने फैसला किया कि गिटिया के आंतरिक कंटेनर रिजिस्ट्री का उपयोग करें, इसके लिए इसके एचटीटीपीएस एक्सेस को विनिर्देशित करना आवश्यक है।

मैं इसे कोई भी तरह से सार्वजनिक बनाऊंगा, इसलिए डॉकर और केबीएस को कोई भी डॉकर लॉगिन करने की आवश्यकता नहीं होगी।
हो सकता है। चलो देखते हैं कि हम कैसे जाते हैं।

जांच करें कि क्या यह काम कर रहा है

कंटेनर रिजिस्ट्री हमारे लिए उपयुक्त है या नहीं, इसकी जांच करने के लिए हम चाहते हैं कि

  • इमेज को इसमें डाल सकें और
  • उस इमेज से केबीएस में एक तैयारी बना सकें
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

ठीक! अब नेविगेट करें :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

उपयोगी लिंक

अतिरिक्त संसाधन