Alibaba Cloud Service Mesh (ASM) giriş ağ geçidinizin güvenliğini sağlamak için gerçek istemci IP adresini elde etmeniz gerekir. Bu sayede, erişimi denetlemek amacıyla bir IP engelleme listesi veya IP izin listesi kullanan bir yetkilendirme ilkesi oluşturabilirsiniz. Bu konuda, giriş ağ geçidinizin bir HTTP istek üst bilgisinden gerçek istemci IP adresini alacak şekilde nasıl yapılandırılacağı açıklanmaktadır.
Önkoşullar
Ad alanı için otomatik yan proxy enjeksiyonu etkinleştirildi. Daha fazla bilgi için bkz. Otomatik enjeksiyonu etkinleştirme.
Arka plan
Uygulamalar genellikle isteklerdeki istemci özelliklerini (X-Forwarded-For üst bilgisi gibi) iletmek için bir ters proxy'ye güvenir. Ancak Istio çeşitli ağ topolojilerinde dağıtılabildiğinden giriş ağ geçidine Classic Load Balancer (CLB) genel IP adresi kullanılarak doğrudan, bir Web Application Firewall (WAF) üzerinden veya başka belirtilmemiş dağıtım topolojileriyle erişilebilir. Bu farklı dağıtım mimarilerini desteklemek için Service Mesh ASM, istemci özelliklerini hedef iş yüküne doğru şekilde iletmek üzere sabit bir varsayılan değer sağlayamaz. Sonuç olarak, gerçek istemci IP adresini X-Forwarded-For üst bilgisinden doğrudan alamazsınız.
Bu sorunu çözmek için ASM ağ geçidindeki numTrustedProxies parametresini, ağ geçidi proxy'sinin önünde konuşlandırılan güvenilir proxy sayısına ayarlayın. Bu yapılandırma, giriş ağ geçidinin X-Envoy-External-Address üst bilgisine doldurduğu değeri kontrol eder; böylece yukarı akış hizmetleri bu değeri kullanarak istemcinin orijinal IP adresine erişebilir.
Yordam
-
Örnek bir uygulama dağıtın.
kubectl kullanarak kümeye bağlanın. Daha fazla bilgi için bkz. Kümenin kubeconfig dosyasını alma ve kubectl ile kümeye bağlanma.
-
httpbin uygulamasını dağıtın.
-
Aşağıdaki içeriğe sahip bir httpbin.yaml dosyası oluşturun.
-
httpbin uygulamasını dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin.yaml
-
-
Bir ASM ağ geçidi oluşturun.
ASM konsoluna giriş yapı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.
-
Ingress Gateway sayfasında Create seçeneğini tıklayın ve temel ağ geçidi ayarlarını yapılandırın.
CLB instance type değerini Internet Access olarak ayarlayın. Diğer parametreleri ihtiyacınıza göre yapılandırın. Parametreler hakkında daha fazla bilgi için bkz. Giriş ağ geçidi hizmeti oluşturma.
Advanced Options seçeneğini tıklayın, External Traffic Policy değerini Local olarak ayarlayın ve ardından Create seçeneğini tıklayın.
-
Bir Gateway ve bir VirtualService oluşturun.
Denetim düzlemindeki Istio kaynaklarını yönetmek için kubectl kullanın. Daha fazla bilgi için bkz. Istio kaynaklarına erişmek için denetim düzleminde kubectl kullanma.
-
Bir Gateway kaynağı oluşturun.
-
Aşağıdaki içeriği kullanarak httpbin-gateway.yaml dosyasını oluşturun.
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: httpbin-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" -
Gateway kaynağını oluşturmak için aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin-gateway.yaml
-
-
Bir VirtualService kaynağı oluşturun.
-
Aşağıdaki içeriği kullanarak httpbin-virtualservice.yaml dosyasını oluşturun.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: httpbin spec: hosts: - "*" gateways: - httpbin-gateway http: - route: - destination: host: httpbin port: number: 8000 -
VirtualService kaynağını oluşturmak için aşağıdaki komutu çalıştırın.
kubectl apply -f httpbin-virtualservice.yaml
-
httpbin uygulaması için 80 bağlantı noktasındaki giriş ağ geçidinin IP adresini alın. Daha fazla bilgi için bkz. Giriş ağ geçidi hizmeti oluşturma.
Web Application Firewall içinde, Adım 4 içinde aldığınız giriş ağ geçidi adresini ekleyin. Daha fazla bilgi için bkz. WAF öğreticisi.
-
ASM ağ geçidine numTrustedProxies parametresini ekleyin.
ASM konsoluna giriş yapı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.
Ingress Gateway sayfasında hedef ağ geçidini bulun ve View YAML seçeneğini tıklayın.
-
Edit iletişim kutusunda, spec parametresinin altına aşağıdaki içeriği ekleyin ve ardından OK seçeneğini tıklayın.
podAnnotations: proxy.istio.io/config: '{"gatewayTopology" : { "numTrustedProxies": 2 } }'numTrustedProxies değerini, mevcut topolojinize göre ağ geçidi proxy'sinin önünde konuşlandırılan güvenilir proxy sayısına ayarlayın. numTrustedProxies değerini sıfırdan büyük bir N değerine ayarlarsanız güvenilir istemci adresi, X-Forwarded-For üst bilgisindeki sağdan itibaren (N+1). adres olur.
-
httpbin uygulamasına erişmek ve gerçek istemci IP adresini almak için aşağıdaki komutu çalıştırın.
curl http://{IP address of the ingress gateway}/get?show_env=trueBeklenen çıktı:
{ "args": { "show_env": "true" }, "headers": { "Accept": "*/*", .... "X-Envoy-Attempt-Count": "1", "X-Envoy-External-Address": "106.11.**.**", .... }, .... }X-Envoy-External-Address değeri gerçek istemci IP adresidir.