एक वेब परियोजना की तैनाती करते समय, एसएसएल प्रमाणपत्र कार्यान्वयन एक आम चुनौती है जिसका सामना हर इंजीनियर को करना पड़ सकता है - और मैं कोई अपवाद नहीं हूं।
आमतौर पर, स्टार्टअप लेट्स एनक्रिप्ट जैसे मुफ्त प्रमाणपत्रों का विकल्प चुनते हैं। हालाँकि, ये विचार करने के लिए सीमाओं और असुविधाओं के साथ आते हैं, जो पर विस्तृत हैं।निःशुल्क प्रमाणपत्रों के साथ व्यक्तिगत रूप से जिन समस्याओं का मैंने सामना किया है, उन पर करीब से नज़र डालते हैं:
हाल ही में, मैं एक विशिष्ट प्रौद्योगिकी स्टैक पर ध्यान केंद्रित कर रहा हूं और एज़्योर क्लाउड प्रदाता के संदर्भ में कुबेरनेट्स क्लस्टर-आधारित बुनियादी ढाँचे के समाधान पर चर्चा करना चाहता हूँ। जबकि प्रमाणित प्रबंधक इस क्षेत्र में एक लोकप्रिय समाधान है, मैं इसे अधिक सुविधा के लिए हेल्म के माध्यम से स्थापित करना पसंद करता हूं।
तो, आगे की हलचल के बिना, आइए सीधे इसमें गोता लगाएँ:
helm repo add jetstack https: //charts.jetstack.io
helm repo update kubectl apply -f https: //github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.crds.yaml
helm install cert-manager jetstack/cert-manager -- namespace cert - manager -- create - namespace -- version v1 . 6 . 1
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-cluster-issuer
spec:
acme:
server: //acme-v02.api.letsencrypt.org/directory
email: p…[email protected] #your e-mail
privateKeySecretRef:
name: letsencrypt-cluster-issuer
solvers:
- http01:
ingress:
class: nginx
पहले परिदृश्य में, मेरी YAML फाइलें इस तरह दिखती थीं:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: myservice2 namespace : test
Spec : duration : 2160h
renewBefore : 72h
dnsNames : - myservice2 . mydomain . org # you resources
secretName : myservice2 - tls
issuerRef : name : letsencrypt - cluster - issuer
kind : ClusterIssuer
kubectl describe certificates <cert name > -n <namespace name >
तो, आखिर में हमारे पास क्या है?
annotations : cert-manager .io/cluster-issuer: "letsencrypt-cluster-issuer" cert-manager .io/renew-before: 72h
az aks show -g < RG > -n < AKS_name >
az keyvault set-policy --name < name AKV > --object-id < get from first step value > --secret-permissions get
apiVersion: spv.no/v1 kind: AzureKeyVaultSecret metadata: name: wildcard-cert #any name namespace : default
spec : vault : name : SandboxKeyVault # name you keyvault in Azure
object : name : name_object_id # name object id from Azure AKV this cert
type : secret
output : secret : name : wildcard - cert # any name for secret in your namespace
type : kubernetes . io / tls
chainOrder : ensureserverfirst # very important values !!!
तकनीकी पहलुओं और कॉन्फ़िगरेशन पर चर्चा करने के बाद, आइए एज़्योर प्रमाणपत्रों की ख़ासियत पर वापस जाएँ।
Azure प्रमाणपत्र ऑर्डर करने के लिए दो विकल्प प्रदान करता है, जिनमें से दोनों GoDaddy द्वारा प्रदान किए जाते हैं:Azure वाइल्डकार्ड प्रमाणपत्र केवल प्रथम-स्तरीय उप डोमेन की सुरक्षा करता है। उदाहरण के लिए, यदि हमारे पास mydomain.com नाम का एक डोमेन है, तो प्रमाणपत्र केवल .mydomain.com के रूप में प्रथम-स्तरीय उप डोमेन को कवर करेगा।
इसलिए, प्रमाणपत्र service1.mydomain.com, service2.mydomain.com, service3.mydomain.com जैसे संसाधनों के लिए काम करेगा, लेकिन यह service1.test.mydomain.com या mail.service1.mydomain.com को कवर नहीं करेगा।
फिर हमारे पास क्या विकल्प हैं?पहला विकल्प व्यावहारिक होने की संभावना नहीं है, क्योंकि उपडोमेन की संख्या, विशेष रूप से दूसरे स्तर पर, बहुत अधिक हो सकती है। इस प्रकार, प्रत्येक उपडोमेन ( .service1.mydomain.com, *.dev.mydomain.com… ) के लिए वाइल्डकार्ड प्रमाणपत्र के लिए भुगतान करना सबसे उचित समाधान नहीं है।
दूसरे विकल्प के रूप में, मैंने इस मामले के बारे में एज़्योर सपोर्ट टीम के साथ लंबी बातचीत की, इनकार, हताशा और क्रोध के सभी चरणों से गुजरते हुए, केवल अंत में यह महसूस किया कि प्रमाणपत्रों के लिए सैन क्षमता अभी तक लागू नहीं की गई है। अंत तक, मैंने आशा की थी कि Azure पर ऐसा कोई मुद्दा कभी नहीं होगा। इसके विपरीत, उनके प्रतियोगी, AWS Amazon, अपने AWS सर्टिफिकेट मैनेजर (ACM) के माध्यम से प्रमाणपत्र प्रदान करते हैं जो वाइल्डकार्ड सहित 10 वैकल्पिक विषय नामों तक का समर्थन करते हैं। यह आपको वाइल्डकार्ड कैरेक्टर (*) के साथ 10 सबडोमेन बनाने की अनुमति देता है, और यहां तक कि 100k तक के AWS पर कोटा बढ़ाने का अनुरोध भी करता है। समाप्त करने के लिए, मैं साझा करूँगा कि आप Azure पर फ्रंट डोर सेवा के साथ प्रमाणपत्रों का उपयोग कैसे कर सकते हैं।मेरे लिए, एज़्योर फ्रंट डोर (AFD) एक वैश्विक और स्केलेबल गेटवे है जो आने वाले ट्रैफ़िक को उपयुक्त एंडपॉइंट्स पर निर्देशित करने के लिए Microsoft के विश्वव्यापी एज नेटवर्क का लाभ उठाता है, जो वेब एप्लिकेशन या सेवाएं हो सकती हैं। एचटीटीपी/एचटीटीपीएस लेयर (लेयर 7) पर काम करते हुए फ्रंट डोर क्लाइंट रिक्वेस्ट को पूल से उपलब्ध एप्लिकेशन सर्वर तक पहुंचाता है। एप्लिकेशन का सर्वर-साइड कोई भी इंटरनेट-सुलभ सेवा हो सकती है, चाहे वह Azure के अंदर या बाहर होस्ट की गई हो।
प्रलेखन वेबसाइट से एक उदाहरण
एज़्योर फ्रंट डोर एक सुविधाजनक उपकरण है जो आपको दुनिया भर में वितरित अनुप्रयोगों और सेवाओं तक पहुँचने वाले आने वाले ट्रैफ़िक को संतुलित और प्रॉक्सी करने की अनुमति देता है। यह नियम हैंडलर को कॉन्फ़िगर करके, नीतियों में शामिल होने और फ़ायरवॉल सेटिंग्स द्वारा विभिन्न नियमों को बाध्य करने की क्षमता सहित कई सुविधाएँ प्रदान करता है। मैं इस लेख में AFD सेवा की बारीकियों में बहुत गहराई तक नहीं जाऊँगा, बल्कि प्रमाणपत्रों की सेवा विशिष्टताओं पर ध्यान केंद्रित करूँगा।जैसा कि आप उम्मीद कर सकते हैं, एज़्योर फ्रंट डोर पर आने वाला ट्रैफ़िक या तो http या https हो सकता है। यदि आप https चुनते हैं, तो आपके पास तीन विकल्प हैं: Azure फ्रंट डोर सेवा पर ही एक प्रमाणपत्र जनरेट करें, अपना स्वयं का प्रमाणपत्र अपलोड करें, या अपने मौजूदा प्रमाणपत्र को Azure Key Vault में सिंक करें। फ़्रंट डोर सेवा को की वॉल्ट तक पहुँचने की अनुमति देने के लिए, आपको आवश्यक अनुमतियाँ कॉन्फ़िगर करने की आवश्यकता होगी।
मैं अंतिम विकल्प का उपयोग करने और प्रमाण पत्र के नवीनतम संस्करण का चयन करने की सलाह देता हूं ताकि इसे मैन्युअल रूप से नवीनीकृत या पुन: उत्पन्न करने से बचा जा सके। एकेवी से सर्टिफिकेट जोड़ने से सब कुछ अपने आप अपडेट रहेगा।यह सेटअप आपको निम्न परिणाम देगा:
एचटीटीपी ट्रैफ़िक को संभालना कोई समस्या नहीं है, लेकिन संसाधन पूल सेट करते समय और एकेएस क्लस्टर के बाहरी आईपी पते को निर्दिष्ट करते समय ध्यान में रखने के लिए एक सूक्ष्म विवरण है। यह सुनिश्चित करने के लिए "सर्वर घटक नोड हेडर" फ़ील्ड को खाली छोड़ना सुनिश्चित करें कि यह "आईपी या नोड नाम" फ़ील्ड में दर्ज किए गए मानों से स्वचालित रूप से पॉप्युलेट हो गया है।
यह *.mydomain.com प्रारूप में सभी सेवाओं को ठीक से कार्य करने की अनुमति देगा। एक बार जब आप इस कॉन्फ़िगरेशन को पूरा कर लेते हैं, तो आप पूरी तरह से तैयार हो जाते हैं।
कुछ परिदृश्यों में, एज़्योर फ्रंट डोर से एकेएस को https के माध्यम से ट्रैफ़िक पुनर्निर्देशित करना अधिक लाभप्रद हो सकता है। सर्वर पूल सेटिंग्स में एज़्योर फ्रंट डोर के सही कामकाज को सुनिश्चित करने के लिए, आपके एकेएस क्लस्टर के अनुरूप डीएनएस नाम निर्दिष्ट करना महत्वपूर्ण है, जो एसएनआई और स्वास्थ्य जांच से संबंधित है। अन्यथा, सेटअप काम नहीं करेगा।
मेरे मामले में, मेरे AKS समूहों को कोई नाम नहीं दिया गया था, मेरे पास केवल ऐसी सेवाएँ थीं जो पहले सीधे काम करती थीं लेकिन उन्हें Azure Front Door के माध्यम से कार्य करना पड़ता था। इसे संबोधित करने के लिए, मुझे एकेएस क्लस्टर के लिए एक अलग डीएनएस नाम बनाना था, डीएनएस को कॉन्फ़िगर करना था, और प्रवेश से जुड़े प्रमाणपत्र के साथ एक अलग सेवा स्थापित करनी थी। तभी मैं https ट्रैफ़िक को AKS क्लस्टर पर पुनर्निर्देशित कर सकता था और यह सुनिश्चित कर सकता था कि यह सभी उपलब्ध सेवाओं के लिए सही तरीके से काम करे।
AKS के लिए कनेक्शन अनुमति सेट करते समय सुरक्षा उपायों पर विचार करना महत्वपूर्ण है। एक सुरक्षित कनेक्शन सुनिश्चित करने के लिए, आप AKS के लिए नेटवर्क सुरक्षा समूह में केवल Azure Front Door IP पतों से AKS से कनेक्ट करने की अनुमति को सीमित कर सकते हैं (जैसा कि नीचे दी गई तस्वीर में दिखाया गया है)।
Pavel Shapurau, लीड DevOps इंजीनियर, सोशल डिस्कवरी ग्रुप द्वारा लिखित