Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten dokument ułatwia skonfigurowanie przykładowej aplikacji korzystającej z następujących zasobów Gateway API. Podano kroki, aby:
- Utwórz zasób Gateway z jednym odbiornikiem HTTPS.
- Utwórz zasób HTTPRoute , który odwołuje się do usługi zaplecza.
- Utwórz zasób BackendTLSPolicy z certyfikatem klienta i urzędu certyfikacji dla usługi zaplecza, do którego odwołuje się usługa HTTPRoute.
Kontekst
Mutual Transport Layer Security (MTLS) to proces oparty na certyfikatach szyfrowania komunikacji i identyfikowania klientów w usłudze. Dzięki temu obciążenia zaplecza mogą dodatkowo zwiększyć poziom zabezpieczeń, ufając tylko połączeniom z uwierzytelnionymi urządzeniami.
Zobacz następującą ilustrację:
Wymagania wstępne
Jeśli stosujesz strategię wdrażania BYO, upewnij się, że skonfigurujesz Application Gateway dla zasobów kontenerów oraz kontroler ALB.
Jeśli stosujesz zarządzaną strategię wdrażania ALB, upewnij się, że aprowizujesz kontroler ALB i aprowizujesz zasoby Application Gateway for Containers za pośrednictwem niestandardowego zasobu ApplicationLoadBalancer.
Wdróż przykładową aplikację HTTP:
Zastosuj następujący plik deployment.yaml w Twoim klastrze, aby utworzyć przykładową aplikację internetową i wdrożyć przykładowe sekrety w celu zademonstrowania wzajemnego uwierzytelniania zaplecza (mTLS).
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/end-to-end-ssl-with-backend-mtls/deployment.yamlTo polecenie tworzy w klastrze następujące elementy:
- Przestrzeń nazw o nazwie
test-infra - Jedna usługa nazywana
mtls-appw przestrzeni nazwtest-infra - Wdrożenie o nazwie
mtls-appw przestrzeni nazwtest-infra - Jedna mapa konfiguracyjna w przestrzeni nazw
test-infrao nazwiemtls-app-nginx-cm - Cztery sekrety o nazwie
backend.com,frontend.com,gateway-client-certica.bundlew przestrzeni nazwtest-infra
- Przestrzeń nazw o nazwie
Wdróż wymagane zasoby Gateway API
Tworzenie bramy
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
Uwaga / Notatka
Gdy kontroler usługi ALB tworzy zasoby usługi Application Gateway for Containers w usłudze Azure Resource Manager, używa następującej konwencji nazewnictwa dla zasobu frontonu: fe-<eight randomly generated characters>.
Jeśli chcesz zmienić nazwę zasobu interfejsu frontowego utworzonego w Azure, rozważ zastosowanie strategii wdrożenia 'bring-your-own'.
Po utworzeniu zasobu bramy upewnij się, że stan jest prawidłowy, nasłuchiwacz jest zaprogramowany, a do bramy przypisano adres.
kubectl get gateway gateway-01 -n test-infra -o yaml
Przykładowe dane wyjściowe pomyślnego utworzenia bramy:
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
Po utworzeniu bramy utwórz zasób httpRoute.
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
Po utworzeniu zasobu usługi HTTPRoute upewnij się, że trasa jest zaakceptowana , a zasób Application Gateway for Containers jest zaprogramowany.
kubectl get httproute https-route -n test-infra -o yaml
Sprawdź, czy stan zasobu usługi Application Gateway for Containers został pomyślnie zaktualizowany.
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
Utwórz BackendTLSPolicy
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
Po utworzeniu obiektu BackendTLSPolicy sprawdź stan obiektu, aby upewnić się, że zasady są prawidłowe:
kubectl get backendtlspolicy -n test-infra mtls-app-tls-policy -o yaml
Przykładowe dane wyjściowe prawidłowego tworzenia obiektu BackendTLSPolicy:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid BackendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Testowanie dostępu do aplikacji
Teraz jesteśmy gotowi wysłać ruch do naszej przykładowej aplikacji za pośrednictwem FQDN przypisanego do frontend. Użyj następującego polecenia, aby uzyskać FQDN.
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Polecenie curl dla tej nazwy FQDN powinno zwrócić odpowiedzi z zaplecza na podstawie konfiguracji dla HTTPRoute.
curl --insecure https://$fqdn/
Gratulacje, zainstalowano ALB Controller, wdrożono aplikację zaplecza i skierowano ruch do aplikacji za pośrednictwem Application Gateway for Containers.