Giriş ağ geçidi ile sidecar proxy arasındaki tüm veriler Mutual Transport Layer Security (mTLS) tüneli üzerinden iletilir. Uygulamaya sidecar proxy'ler enjekte edilmişse uçtan uca şifrelemeyi sağlamak için giriş ağ geçidinde TLS sonlandırmasını yapılandırmanızı öneririz. Uygulamaya sidecar proxy'ler enjekte edilmemişse veya başka özel durumlar söz konusuysa giriş ağ geçidi TLS aktarımını destekler. Bu konuda, bir kümedeki HTTPS hizmetlerine güvenli erişimi sağlamak amacıyla giriş ağ geçidinde TLS aktarımının nasıl etkinleştirileceği açıklanmaktadır.
Ön koşullar
Bir giriş ağ geçidi dağıtılmış olmalıdır. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma.
ASM örneğine eklenen kümeye bir uygulama dağıtılmış olmalıdır. Daha fazla bilgi için bkz. Uygulamayı ASM ile ilişkili kümeye dağıtma.
Internet Content Provider (ICP) kaydı bulunan bir alan adı mevcut olmalıdır. Bu konuda aliyun.com alan adı kullanılmaktadır.
1. Adım: Sunucu sertifikası ve özel anahtar hazırlama
sample.aliyun.com alan adı için kullanılabilir bir sunucu sertifikanız ve özel anahtarınız varsa özel anahtarı sample.aliyun.com.key ve sunucu sertifikasını sample.aliyun.com.crt olarak yeniden adlandırın. Alternatif olarak sample.aliyun.com için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki openssl komutlarını çalıştırı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=mynginx Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt -
sample.aliyun.comsunucusu için sunucu sertifikası ve özel anahtar oluşturmak üzere aşağıdaki komutları çalıştırın:openssl req -out sample.aliyun.com.csr -newkey rsa:2048 -nodes -keyout sample.aliyun.com.key -subj "/CN=sample.aliyun.com/O=mynginx sample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in sample.aliyun.com.csr -out sample.aliyun.com.crt
2. Adım: Dahili hizmeti tanımlama
Bu örnekteki dahili hizmet bir NGINX sunucusudur. Önce NGINX sunucusu için bir yapılandırma dosyası oluşturun. aliyun.com alan adı için kök yolun Welcome to aliyun.com without TLS Termination! mesajını ve 200 durum kodunu döndürmesini yapılandırın. Aşağıda mynginx.conf dosyasının içeriği gösterilmektedir.
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 443 ssl;
location / {
return 200 'Welcome to aliyun.com without TLS Termination!';
add_header Content-Type text/plain;
}
server_name www.aliyun.com;
ssl_certificate /etc/nginx-server-certs/tls.crt;
ssl_certificate_key /etc/nginx-server-certs/tls.key;
}
}
-
kubeconfig dosyasındaki bilgilere göre kubectl kullanarak giriş ağ geçidi pod'unun ait olduğu kümeye bağlanın. Ardından NGINX sunucusunun yapılandırmasını depolamak üzere bir ConfigMap oluşturmak için aşağıdaki komutu çalıştırın:
kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf -
kubeconfig dosyasındaki bilgilere göre kubectl kullanarak giriş ağ geçidi pod'unun ait olduğu kümeye bağlanın. Ardından varsayılan ad alanında sunucu sertifikasını ve özel anahtarı içeren bir secret oluşturmak için aşağıdaki komutu çalıştırın:
kubectl create secret tls nginx-server-certs --key sample.aliyun.com.key --cert sample.aliyun.com.crt Varsayılan ad alanı için otomatik sidecar proxy enjeksiyonunu etkinleştirin. Prosedür hakkında daha fazla bilgi için bkz. Otomatik sidecar proxy enjeksiyonunu etkinleştirme.
-
Aşağıdaki içeriği içeren bir mynginxapp.yaml dosyası oluşturun. Ardından aliyun.com alan adı için dahili bir hizmet oluşturmak üzere
kubectl apply -f mynginxapp.yamlkomutunu çalıştırın. -
NGINX sunucusunun dağıtılıp dağıtılmadığını kontrol etmek için sidecar proxy'den NGINX sunucusuna istek göndermek üzere aşağıdaki komutu çalıştırın:
kubectl exec -it $(kubectl get pod -l app=mynginxapp -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl -v -k --resolve sample.aliyun.com:443:127.0.0.1 https://sample.aliyun.com
3. Adım: Ağ geçidi oluşturma
ASM konsolunda oturum açın.
Sol gezinme bölmesinde öğelerini seçin.
Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adına tıklayın veya Actions sütunundaki Manage seçeneğine tıklayın.
ASM örneğinin ayrıntılar sayfasında sol gezinme bölmesinden seçeneklerini belirleyin. Açılan sayfada Create from YAML seçeneğine tıklayın.
-
Ağ Geçidini aşağıdaki gibi yapılandırın ve ardından Create seçeneğine tıklayın.
Bir ad alanı seçin. Bu örnekte default ad alanı kullanılmaktadır.
-
Kod düzenleyicide aşağıdaki YAML kodunu kullanarak bir Istio ağ geçidi tanımlayın:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: istio-mynginx-customingressgateway spec: selector: istio: ingressgateway servers: - hosts: - 'sample.aliyun.com' port: name: https number: 443 protocol: HTTPS tls: mode: PASSTHROUGH
Gateway sayfasında oluşturulan Istio ağ geçidini görüntüleyebilirsiniz.
4. Adım: Sanal hizmet oluşturma
ASM konsolunda oturum açın.
Sol gezinme bölmesinde öğelerini seçin.
Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adına tıklayın veya Actions sütunundaki Manage seçeneğine tıklayın.
ASM örneğinin ayrıntılar sayfasında sol gezinme bölmesinden seçeneklerini belirleyin. Açılan sayfada Create from YAML seçeneğine tıklayın.
-
Sanal Hizmeti aşağıdaki gibi yapılandırın ve ardından Create seçeneğine tıklayın.
Bir ad alanı seçin. Bu örnekte default ad alanı kullanılmaktadır.
-
Kod düzenleyicide aşağıdaki YAML kodunu kullanarak bir sanal hizmet tanımlayın:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: istio-mynginx-customvirtualservice spec: hosts: - "sample.aliyun.com" gateways: - istio-mynginx-customingressgateway tls: - match: - port: 443 sniHosts: - sample.aliyun.com route: - destination: host: mynginxapp.default.svc.cluster.local port: number: 443
VirtualService sayfasında oluşturulan sanal hizmeti görüntüleyebilirsiniz.
Sonuçları görüntüleme
-
Giriş ağ geçidinin IP adresini almak için aşağıdaki yöntemlerden birini kullanın:
Yöntem 1: ASM konsolunu kullanarak. Daha fazla bilgi için Istio kaynaklarını kullanarak trafiği bir hizmetin farklı sürümlerine yönlendirme konusundaki 3. Adımın 1. Alt Adımı bölümüne bakın.
-
Yöntem 2: Bir kubectl komutu çalıştırarak.
kubeconfig dosyasındaki bilgilere göre kubectl kullanarak giriş ağ geçidi pod'unun ait olduğu kümeye bağlanın. Ardından giriş ağ geçidinin IP adresini almak için aşağıdaki komutu çalıştırın:
kubectl get svc -n istio-system -l istio=ingressgateway
-
aliyun.com alan adına HTTPS üzerinden erişmek için aşağıdaki komutu çalıştırın:
curl -v --cacert aliyun.root.crt --resolve sample.aliyun.com:443:xx.xx.xx.xx https://sample.aliyun.comBeklenen çıktı:
Welcome to aliyun.com without TLS Termination!%