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 z interfejsu API bramy. Dostępne są następujące kroki:
- Utwórz zasób bramy z jednym odbiornikiem HTTPS.
- Utwórz zasób HTTPRoute, który odwołuje się do usługi zaplecza.
- Utwórz zasób FrontendTLSPolicy z certyfikatem urzędu certyfikacji.
Tło
Mutual Transport Layer Security (MTLS) to proces oparty na certyfikatach szyfrowania komunikacji i identyfikowania klientów w usłudze. Dzięki temu usługa Application Gateway dla kontenerów może dodatkowo zwiększyć poziom zabezpieczeń, ufając tylko połączeniom z uwierzytelnionymi urządzeniami.
Zobacz następującą ilustrację:
Prawidłowy przepływ certyfikatu klienta przedstawia klienta, który przedstawia certyfikat frontonowi usługi Application Gateway for Containers. Usługa Application Gateway dla kontenerów określa, że certyfikat jest prawidłowy, a serwer proxy żądań do obiektu docelowego zaplecza. Odpowiedź jest ostatecznie zwracana do klienta.
Przepływ odwołanego certyfikatu klienta przedstawia klienta przedstawiającego odwołany certyfikat na fronton usługi Application Gateway for Containers. Usługa Application Gateway dla kontenerów określa, że certyfikat jest nieprawidłowy i uniemożliwia wysłanie żądania do klienta. Klient otrzyma nieprawidłowe żądanie HTTP 400 i odpowiedni powód.
Wymagania wstępne
Jeśli wykonasz strategię wdrażania byo, upewnij się, że skonfigurowaliśmy usługę Application Gateway dla zasobów kontenerów i kontroler usługi ALB.
Jeśli wykonasz strategię wdrażania zarządzanego przez usługę ALB, upewnij się, że aprowizujesz kontroler usługi ALB i aprowizujesz zasoby usługi Application Gateway for Containers za pośrednictwem zasobu niestandardowego ApplicationLoadBalancer.
Wdróż przykładową aplikację HTTP:
Zastosuj następujący plik deployment.yaml w klastrze, aby utworzyć przykładową aplikację internetową i wdrożyć przykładowe wpisy tajne w celu zademonstrowania wzajemnego uwierzytelniania frontonu (mTLS).
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yamlTo polecenie tworzy następujące polecenie w klastrze:
- Przestrzeń nazw o nazwie
test-infra - Jedna usługa wywoływana
echotest-infraw przestrzeni nazw - Jedno wdrożenie o nazwie
echowtest-infraprzestrzeni nazw - Jeden wpis tajny wywoływany
listener-tls-secrettest-infraw przestrzeni nazw
- Przestrzeń nazw o nazwie
Generowanie certyfikatów
W tym przykładzie utworzymy certyfikat główny i wystawimy certyfikat klienta z katalogu głównego. Jeśli masz już certyfikat główny i certyfikat klienta, możesz pominąć te kroki.
Generowanie klucza prywatnego dla certyfikatu głównego
openssl genrsa -out root.key 2048
Generowanie certyfikatu głównego
openssl req -x509 -new -nodes -key root.key -sha256 -days 1024 -out root.crt -subj "/C=US/ST=North Dakota/L=Fargo/O=Contoso/CN=contoso-root"
Generowanie klucza prywatnego dla certyfikatu klienta
openssl genrsa -out client.key 2048
Tworzenie żądania podpisania certyfikatu dla certyfikatu klienta
openssl req -new -key client.key -out client.csr -subj "/C=US/ST=North Dakota/L=Fargo/O=Contoso/CN=contoso-client"
Generowanie certyfikatu klienta podpisanego przez certyfikat główny
openssl x509 -req -in client.csr -CA root.crt -CAkey root.key -CAcreateserial -out client.crt -days 1024 -sha256
Wdrażanie wymaganych zasobów interfejsu API bramy
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: mtls-listener
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Same
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: listener-tls-secret
EOF
Uwaga
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 frontonu utworzonego na platformie Azure, rozważ zastosowanie strategii wdrażania bring-your-own.
Po utworzeniu zasobu bramy upewnij się, że stan jest prawidłowy, odbiornik jest zaprogramowany, a adres jest przypisany do bramy.
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: echo
port: 80
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 wpis tajny kubernetes przy użyciu narzędzia kubectl zawierającego łańcuch certyfikatów do certyfikatu klienta.
kubectl create secret generic ca.bundle -n test-infra --from-file=ca.crt=root.crt
Tworzenie elementu FrontendTLSPolicy
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: FrontendTLSPolicy
metadata:
name: mtls-policy
namespace: test-infra
spec:
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
sectionNames:
- mtls-listener
default:
verify:
caCertificateRef:
name: ca.bundle
group: ""
kind: Secret
namespace: test-infra
EOF
Po utworzeniu obiektu FrontendTLSPolicy sprawdź stan obiektu, aby upewnić się, że zasady są prawidłowe:
kubectl get frontendtlspolicy mtls-policy -n test-infra -o yaml
Przykładowe dane wyjściowe prawidłowego tworzenia obiektu FrontendTLSPolicy:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid FrontendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Testowanie dostępu do aplikacji
Teraz możemy wysłać jakiś ruch do naszej przykładowej aplikacji za pośrednictwem nazwy FQDN przypisanej do frontonu. Użyj następującego polecenia, aby uzyskać nazwę FQDN:
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Zwijanie nazwy FQDN frontonu bez certyfikatu klienta.
curl --insecure https://$fqdn/
Zwróć uwagę, że alerty odpowiedzi są wymagane przez certyfikat.
curl: (56) OpenSSL SSL_read: OpenSSL/1.1.1k: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0
Curl nazwy FQDN przedstawiającej wygenerowany certyfikat klienta.
curl --cert client.crt --key client.key --insecure https://$fqdn/
Zwróć uwagę, że odpowiedź pochodzi z usługi zaplecza za usługą Application Gateway for Containers.
Gratulacje, zainstalowano kontroler usługi ALB, wdrożono aplikację zaplecza, uwierzytelniono się za pośrednictwem certyfikatu klienta i zwrócono ruch z usługi zaplecza za pośrednictwem usługi Application Gateway for Containers.