Harici istemciler için şifreli erişim sağlamak amacıyla ASM ağ geçidinde HTTPS'yi etkinleştirebilirsiniz. ASM ağ geçitleri, özel anahtarları, sunucu sertifikalarını ve kök sertifikaları gerçek zamanlı olarak yapılandırmanıza olanak tanıyan dinamik sertifika yüklemeyi destekler. Bu yöntem, ağ geçidini yeniden başlatma veya Secret birim bağlamalarına (Secret volume mounts) başvurma gereksinimini ortadan kaldırarak operasyonel karmaşıklığı azaltır ve hizmet kesintisi riskini önler. ASM ağ geçitleri birden fazla sertifika ve özel anahtar çiftini izleyip yönetebilir; bu sayede farklı ana bilgisayarlar için esnek ve güvenli iletişim sağlar ve veri iletiminin güvenliğini artırır.
Önkoşullar
Arka plan bilgileri
Istio, dinamik sertifika yüklemeyi destekler. Aktarım Katmanı Güvenliği (TLS) için gereken özel anahtar, sunucu sertifikası ve kök sertifikası, ağ geçidi yeniden başlatılmadan dinamik olarak yapılandırılabilir. Bir ASM ağ geçidi, kendi ad alanındaki Secret'ları izler ve bunları Gateway özel kaynağı (CR) aracılığıyla dinamik olarak yükler. ASM ağ geçidinde HTTPS kullanmanın aşağıdaki avantajları vardır:
Giriş ağ geçidi, gerekli sertifikaları, özel anahtarları veya ilgili kök sertifikaları yeniden başlatma olmadan dinamik olarak ekleyebilir, silebilir veya güncelleyebilir.
Secret birim bağlamalarına gerek yoktur. Bir Kubernetes Secret'ı oluşturduktan sonra ASM ağ geçidi bunu algılar ve sertifikasını, özel anahtarını veya kök sertifikasını giriş ağ geçidine gönderir.
Bir ASM ağ geçidi birden fazla sertifika ve özel anahtar çiftini izleyebilir. Tek yapmanız gereken, birden fazla ana bilgisayar için Secret'lar oluşturmak ve Gateway yapılandırmasını güncellemektir.
Adım 1: Sertifikaları ve özel anahtarları hazırlayın
Bir alan adı kullanırken, bu alan adının herkese açık olarak erişilebilir olduğundan emin olmak için Internet Content Provider (ICP) kaydı gerekebilir. Bu konuda örnek olarak aliyun.com kullanılarak bir sertifika ve özel anahtar oluşturulacak ve bunlar bir Secret olarak kaydedilecektir.
Zaten aliyun.com için bir sertifikanız ve özel anahtarınız varsa, anahtarı aliyun.com.key ve sertifikayı aliyun.com.crt olarak yeniden adlandırın. Yoksa, bir sertifika ve anahtar oluşturmak için openssl kullanın.
-
Kök sertifika ve özel anahtar oluşturmak için aşağıdaki komutu çalıştırın.
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt -
aliyun.com için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki komutları çalıştırın.
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt -
ASM örneğinizin sürümüne göre bir Secret veya sertifika oluşturun.
-
v1.17'den önceki ASM örnekleri için
Giriş ağ geçidinin kümesi için kubeconfig dosyasını kullanarak, istio-system ad alanında sertifika ve özel anahtarı içeren bir Secret oluşturmak için aşağıdaki komutu çalıştırın.
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crtÖnemliSecret adı
istioveyaprometheusile başlamamalı vetokenalanını içeremez. -
v1.17 ve sonraki sürümlerdeki ASM örnekleri için
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında hedef ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
-
Certificate Management sayfasında Create seçeneğini tıklayın. Certificate Information panelinde aşağıdaki parametreleri ayarlayın ve OK seçeneğini tıklayın.
Parameter
Description
Name
Sertifika için bir ad girin. Bu örnekte myexample-credential kullanılır.
Public Key Certificate
Alt adım 2 içinde oluşturulanaliyun.com.crtdosyasının içeriği.
Private Key
Alt adım 2 içinde oluşturulanaliyun.com.keydosyasının içeriği.
-
Adım 2: a.aliyun.com için arka uç hizmetini tanımlayın
Bu örnekteki arka uç hizmeti NGINX kullanır. a.aliyun.com arka uç hizmeti için /hello yoluna yapılan istekler, durum kodu 200 ile Welcome to a.aliyun.com! dizesini döndürür. Aşağıda myexample-nginx.conf dosyasının içeriği verilmiştir.
events {
}
http {
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
server {
listen 80;
location /hello {
return 200 'Welcome to a.aliyun.com!';
add_header Content-Type text/plain;
}
}
}
-
Giriş ağ geçidinin kümesi için kubeconfig dosyasını kullanarak, NGINX sunucu yapılandırması için bir Kubernetes ConfigMap oluşturmak üzere aşağıdaki komutu çalıştırın.
kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf Varsayılan ad alanı için otomatik yan proxy enjeksiyonunu etkinleştirin. Daha fazla bilgi için bkz. Otomatik yan proxy enjeksiyonunu etkinleştirme.
-
myexampleapp.yaml adlı bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya ekleyin. Ardından, a.aliyun.com alan adı için arka uç hizmetini oluşturmak amacıyla
kubectl apply -f myexampleapp.yamlkomutunu çalıştırın.
Adım 3: b.aliyun.com için arka uç hizmetini tanımlayın
Bu örneğin arka uç hizmeti httpbin kullanır.
-
httpbin.example.yaml adlı bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya kopyalayın.
-
Giriş ağ geçidi pod'unun bulunduğu küme için kubeconfig dosyasını kullanarak, b.aliyun.com alan adı için arka uç hizmetini oluşturmak üzere aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin.example.yaml
Adım 4: Gateway kaynağı oluşturun
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin. Görüntülenen sayfada Create from YAML seçeneğini tıklayın.
-
Create sayfasında hedef ad alanını (bu örnekte default) ve herhangi bir Scenario Template seçin. Ardından aşağıdaki YAML'i girin ve Create seçeneğini tıklayın.
Kaynak oluşturulduktan sonra yeni ağ geçidi Gateway sayfasında görünür.
Adım 5: VirtualService'ler oluşturun
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin. Görüntülenen sayfada Create from YAML seçeneğini tıklayın.
-
Create sayfasında hedef Namespaces ve herhangi bir Scenario Template seçin. Ardından aşağıdaki YAML'i girin ve Create seçeneğini tıklayın.
b.aliyun.com için bir VirtualService oluşturmak üzere bu adımı tekrarlayın.
Sanal hizmetler oluşturulduktan sonra VirtualService sayfasında görünürler.
Sonuçları doğrulayın
Giriş ağ geçidi hizmet adresini alın
Yöntem 1: Adresi ASM konsolu üzerinden görüntüleyin. ASM konsolunda oturum açın, hedef Service Mesh örneğini seçin ve ardından sol gezinme bölmesinde seçeneğini belirleyin. Ingress Gateway sayfasında gerekli bilgileri görüntüleyin.
Yöntem 2: Adresi ACK konsolu üzerinden görüntüleyin. Daha fazla bilgi için bkz. Giriş ağ geçidiyle ilgili hizmet bilgilerini görüntüleme.
Komut satırı üzerinden giriş ağ geçidine erişin
-
a.aliyun.com hizmetine HTTPS üzerinden erişmek için aşağıdaki komutu çalıştırın.
curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS} https://a.aliyun.com/helloBeklenen çıktı:
Welcome to a.aliyun.com! -
b.aliyun.com hizmetine HTTPS üzerinden erişmek için aşağıdaki komutu çalıştırın.
curl -k -H Host:b.aliyun.com --resolve b.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS} https://b.aliyun.com/status/418Beklenen çıktı:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
İlgili işlemler
Ağ geçidi sertifikasını güncelleyin
Bir ağ geçidine monte edilen sertifikayı güncellemek için veri düzleminde yeni bir Secret oluşturun ve ardından Gateway kaynağında bulunan credentialName alanının değerini yeni Secret'ın adıyla değiştirin. Ağ geçidi yeni Secret'ı otomatik olarak monte eder. Bu örnek, example.com sunucusu için new-istio-ingressgateway-certs adlı bir Secret'ın nasıl oluşturulacağını göstermektedir.
-
Vereni myexample olan bir sertifika oluşturun.
-
OpenSSL aracında kök sertifika ve özel anahtar oluşturmak için aşağıdaki komutu çalıştırın.
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=example.com' -keyout example.root.key -out example.root.crt -
example.com sunucusu için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki komutları çalıştırın.
openssl req -out example.com.csr -newkey rsa:2048 -nodes -keyout example.com.key -subj "/CN=example.com/O=myexample organization" openssl x509 -req -days 365 -CA example.root.crt -CAkey example.root.key -set_serial 0 -in example.com.csr -out example.com.crt Kümenin kubeconfig dosyasını edinin ve kubectl kullanarak kümeye bağlanın.
-
new-istio-ingressgateway-certs adlı bir Secret oluşturmak için aşağıdaki komutu çalıştırın.
kubectl create -n istio-system secret tls new-istio-ingressgateway-certs --key example.com.key --cert example.com.crt
-
-
Eski sertifika Secret'ını silmek için kümede aşağıdaki komutu çalıştırın.
kubectl delete secret istio-ingressgateway-certs -n istio-system -
Gateway kaynağını güncelleyin.
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
Gateway sayfasında hedef Gateway kaynağını bulun ve Actions sütunundaki View YAML seçeneğini tıklayın.
edit iletişim kutusunda credentialName değerini yeni sertifika Secret adı olan new-istio-ingressgateway-certs ile değiştirin ve ardından OK seçeneğini tıklayın.
-
Ağ geçidi sertifikasının güncellendiğini doğrulayın.
-
Kümedeki geçerli sertifika bilgilerini görüntülemek için aşağıdaki komutu çalıştırın.
kubectl exec istio-ingressgateway-xxxx -n istio-system -- curl localhost:15000/config_dump > ingressgateway_dump.yaml -
new-istio-ingressgateway-certs sertifikasını yazdırmak ve aramak için aşağıdaki komutu çalıştırın.
cat ingressgateway_dump.yaml | grep new-istio-ingressgateway-certs -A 3Beklenen çıktı:
"name": "kubernetes://new-istio-ingressgateway-certs", "tls_certificate": { "certificate_chain": { "inline_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...xxx...LS0tLS1FTkQgQ0VSVElGSUNBVEUt" } }Base64 ile kodlanmış sertifikayı elde etmek için inline_bytes parametresinden sonraki içeriği kopyalayın.
-
Sertifikayı Base64 ile çözmek için yerel komut satırı aracınızda aşağıdaki komutu çalıştırın.
echo <Base64-encoded-certificate-content> | base64 --decode Çözülen içeriği test.com.crt dosyası olarak kaydedin.
-
Sertifikanın organizasyonunu görüntülemek için OpenSSL aracında aşağıdaki komutu çalıştırın.
openssl x509 -in test.com.crt -text -nooutBeklenen çıktı:
Certificate: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Issuer: O = myexample Inc., CN = example.com Validity Not Before: Mar 17 03:20:27 2022 GMT Not After : Mar 17 03:20:27 2023 GMT Subject: CN = example.com, O = myexample organizationOrganizasyonun başarıyla
myexampleolarak değiştirildiğini görebilirsiniz; bu, ağ geçidi sertifikasının başarıyla güncellendiği anlamına gelir.
-