Kapsayıcılar için Application Gateway ile Arka Uç MTLS - Ağ Geçidi API'si
Bu belge, Ağ Geçidi API'sinden aşağıdaki kaynakları kullanan örnek bir uygulama ayarlamanıza yardımcı olur. Adımlar şunlar için sağlanır:
- Bir HTTPS dinleyicisi ile bir Ağ Geçidi kaynağı oluşturun.
- Arka uç hizmetine başvuran bir HTTPRoute kaynağı oluşturun.
- HTTPRoute'ta başvuruda bulunan arka uç hizmeti için bir istemci ve CA sertifikasına sahip bir BackendTLSPolicy kaynağı oluşturun.
Background
Karşılıklı Aktarım Katmanı Güvenliği (MTLS), iletişimleri şifrelemek ve hizmet istemcilerini tanımlamak için sertifikaları kullanan bir işlemdir. Bu, arka uç iş yüklerinin yalnızca kimliği doğrulanmış cihazlardan gelen bağlantılara güvenerek güvenlik duruşunu daha da artırmasını sağlar.
Aşağıdaki şekilde bakın:
Önkoşullar
BYO dağıtım stratejisini izliyorsanız Kapsayıcılar için Application Gateway kaynaklarınızı ve ALB Denetleyicisi'ni ayarladığınızdan emin olun.
ALB yönetilen dağıtım stratejisini izliyorsanız, ALB Denetleyicinizi sağladığınızdan ve ApplicationLoadBalancer özel kaynağı aracılığıyla Kapsayıcılar için Application Gateway kaynaklarını sağladığınızdan emin olun.
Örnek HTTP uygulamasını dağıtma:
Örnek bir web uygulaması oluşturmak ve arka uç karşılıklı kimlik doğrulamasını (mTLS) göstermek için örnek gizli dizileri dağıtmak için kümenize aşağıdaki deployment.yaml dosyasını uygulayın.
kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/end-to-end-ssl-with-backend-mtls/deployment.yaml
Bu komut kümenizde aşağıdakileri oluşturur:
- Adlı bir ad alanı
test-infra
- Ad alanında çağrılan
mtls-app
birtest-infra
hizmet - Ad alanında çağrılan
mtls-app
birtest-infra
dağıtım - Ad alanında adlı
mtls-app-nginx-cm
bir yapılandırma eşlemesitest-infra
- Ad alanında
test-infra
,frontend.com
,gateway-client-cert
veca.bundle
adlıbackend.com
dört gizli dizi
- Adlı bir ad alanı
Gerekli Ağ Geçidi API'sini dağıtma
Ağ geçidi oluşturma
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-namespace: alb-test-infra
alb.networking.azure.io/alb-name: alb-test
spec:
gatewayClassName: azure-alb-external
listeners:
- name: https-listener
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Same
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: frontend.com
EOF
Not
ALB Denetleyicisi ARM'de Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için şu adlandırma kuralını kullanır: fe-8< rastgele oluşturulan karakterler>
Azure'da oluşturulan ön ucun adını değiştirmek isterseniz kendi dağıtım stratejinizi getirin seçeneğini uygulamayı göz önünde bulundurun.
Ağ geçidi kaynağı oluşturulduktan sonra durumun geçerli olduğundan, dinleyicinin Programlandığından ve ağ geçidine bir adres atandığından emin olun.
kubectl get gateway gateway-01 -n test-infra -o yaml
Başarılı ağ geçidi oluşturma işleminin örnek çıktısı:
status:
addresses:
- type: IPAddress
value: xxxx.yyyy.alb.azure.com
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Valid Gateway
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
listeners:
- attachedRoutes: 0
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Listener is accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
name: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Ağ geçidi oluşturulduktan sonra bir HTTPRoute kaynağı oluşturun.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
rules:
- backendRefs:
- name: mtls-app
port: 443
EOF
HTTPRoute kaynağı oluşturulduktan sonra yolun Kabul Edildi ve Kapsayıcılar için Application Gateway kaynağının Programlandığından emin olun.
kubectl get httproute https-route -n test-infra -o yaml
Kapsayıcılar için Application Gateway kaynağının durumunun başarıyla güncelleştirildiğinden emin olun.
status:
parents:
- conditions:
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Route is Accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
controllerName: alb.networking.azure.io/alb-controller
parentRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
Arka UçTLSPolicy Oluşturma
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: BackendTLSPolicy
metadata:
name: mtls-app-tls-policy
namespace: test-infra
spec:
targetRef:
group: ""
kind: Service
name: mtls-app
namespace: test-infra
default:
sni: backend.com
ports:
- port: 443
clientCertificateRef:
name: gateway-client-cert
group: ""
kind: Secret
verify:
caCertificateRef:
name: ca.bundle
group: ""
kind: Secret
subjectAltName: backend.com
EOF
BackendTLSPolicy nesnesi oluşturulduktan sonra, ilkenin geçerli olduğundan emin olmak için nesnenin durumunu denetleyin:
kubectl get backendtlspolicy -n test-infra mtls-app-tls-policy -o yaml
Geçerli BackendTLSPolicy nesne oluşturma örneği:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid BackendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Uygulamaya erişimi test etme
Artık ön uçta atanan FQDN aracılığıyla örnek uygulamamıza trafik göndermeye hazırız. FQDN'yi almak için aşağıdaki komutu kullanın:
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Bu FQDN'nin kümelenmesi, HTTPRoute'ta yapılandırıldığı gibi arka uçtan yanıt döndürmelidir.
curl --insecure https://$fqdn/
Tebrikler, ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız ve kapsayıcılar için Application Gateway'e giriş yoluyla trafiği uygulamaya yönlendirdiniz.