Adnotacje dla kontrolera ruchu przychodzącego usługi Application Gateway
Zasób ruchu przychodzącego Kubernetes może być dodawać adnotacje do dowolnych par klucz/wartość. Program AGIC opiera się na adnotacjach do programowania funkcji usługi Application Gateway, które nie można konfigurować przy użyciu kodu YAML ruchu przychodzącego. Adnotacje ruchu przychodzącego są stosowane do wszystkich ustawień protokołu HTTP, pul zaplecza i odbiorników pochodzących z zasobu ruchu przychodzącego.
Lista obsługiwanych adnotacji
Aby zasób ruchu przychodzącego był obserwowany przez AGIC, musi być oznaczony adnotacjąkubernetes.io/ingress.class: azure/application-gateway
. Dopiero wtedy AGIC współpracuje z danym zasobem Ruchu przychodzącego.
Klucz adnotacji | Typ wartości | Wartość domyślna | Dozwolone wartości |
---|---|---|---|
appgw.ingress.kubernetes.io/backend-path-prefix | string |
nil |
|
appgw.ingress.kubernetes.io/ssl-redirect | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining-timeout | int32 (sekundy) |
30 |
|
appgw.ingress.kubernetes.io/cookie-based-affinity | bool |
false |
|
appgw.ingress.kubernetes.io/request-timeout | int32 (sekundy) |
30 |
|
appgw.ingress.kubernetes.io/use-private-ip | bool |
false |
|
appgw.ingress.kubernetes.io/backend-protocol | string |
http |
http , https |
appgw.ingress.kubernetes.io/rewrite-rule-set | string |
nil |
Prefiks ścieżki zaplecza
Poniższa adnotacja umożliwia przepisanie ścieżki zaplecza określonej w zasobie ruchu przychodzącego z prefiksem określonym w tej adnotacji. Umożliwia użytkownikom uwidacznienie usług, których punkty końcowe są inne niż nazwy punktów końcowych używanych do uwidaczniania usługi w zasobie ruchu przychodzącego.
Użycie
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
W poprzednim przykładzie zdefiniowano zasób ruchu przychodzącego o nazwie go-server-ingress-bkprefix
z adnotacją appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. Adnotacja informuje bramę aplikacji o utworzeniu ustawienia HTTP, które ma zastępowanie prefiksu ścieżki dla ścieżki /hello
do /test/
.
Uwaga
W powyższym przykładzie zdefiniowano tylko jedną regułę. Jednak adnotacje mają zastosowanie do całego zasobu ruchu przychodzącego, więc jeśli użytkownik zdefiniował wiele reguł, prefiks ścieżki zaplecza zostanie skonfigurowany dla każdej z określonych ścieżek. Jeśli użytkownik chce różnych reguł z różnymi prefiksami ścieżki (nawet dla tej samej usługi), musi zdefiniować różne zasoby ruchu przychodzącego.
Przekierowanie PROTOKOŁU TLS
Usługę Application Gateway można skonfigurować tak, aby automatycznie przekierowywała adresy URL HTTP do swoich odpowiedników HTTPS. Gdy ta adnotacja jest obecna i protokół TLS jest prawidłowo skonfigurowany, kontroler ruchu przychodzącego Kubernetes tworzy regułę routingu z konfiguracją przekierowania i stosuje zmiany w usłudze Application Gateway. Utworzone przekierowanie będzie adresem HTTP 301 Moved Permanently
.
Użycie
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-redirect
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- www.contoso.com
secretName: testsecret-tls
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Opróżnianie Połączenie jonów
connection-draining
: Ta adnotacja pozwala określić, czy włączyć opróżnianie połączeń.
connection-draining-timeout
: Ta adnotacja umożliwia określenie limitu czasu, po którym usługa Application Gateway kończy żądania do punktu końcowego opróżniania zaplecza.
Użycie
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-drain
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Koligacja oparta na plikach cookie
Poniższa adnotacja umożliwia określenie, czy włączyć koligację opartą na plikach cookie.
Użycie
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-affinity
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Limit czasu żądania
Poniższa adnotacja umożliwia określenie limitu czasu żądania w sekundach, po którym usługa Application Gateway zakończy się niepowodzeniem żądania, jeśli odpowiedź nie zostanie odebrana.
Użycie
appgw.ingress.kubernetes.io/request-timeout: "20"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/request-timeout: "20"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Korzystanie z prywatnego adresu IP
Poniższa adnotacja umożliwia określenie, czy uwidocznić ten punkt końcowy w prywatnym adresie IP usługi Application Gateway.
Uwaga
- Usługa Application Gateway nie obsługuje wielu adresów IP na tym samym porcie (na przykład: 80/443). Ruch przychodzący z adnotacją
appgw.ingress.kubernetes.io/use-private-ip: "false"
, a inny elementappgw.ingress.kubernetes.io/use-private-ip: "true"
zHTTP
włączonym spowoduje niepowodzenie usługi AGIC podczas aktualizowania usługi Application Gateway. - W przypadku usługi Application Gateway, która nie ma prywatnego adresu IP, ruch przychodzący z usługą
appgw.ingress.kubernetes.io/use-private-ip: "true"
jest ignorowany. Jest to odzwierciedlone w dziennikach kontrolera i zdarzeniach ruchu przychodzącego dla tych ruchu przychodzącego zNoPrivateIP
ostrzeżeniem.
Użycie
appgw.ingress.kubernetes.io/use-private-ip: "true"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Protokół zaplecza
Poniższa adnotacja umożliwia określenie protokołu, którego usługa Application Gateway powinna używać podczas komunikowania się z zasobnikami. Obsługiwane protokoły to http
i https
.
Uwaga
Certyfikaty z podpisem własnym są obsługiwane w usłudze Application Gateway, ale obecnie program AGIC obsługuje https
tylko wtedy, gdy zasobniki korzystają z certyfikatu podpisanego przez dobrze znany urząd certyfikacji.
Nie używaj portu 80 z protokołem HTTPS i portem 443 z protokołem HTTP w zasobnikach.
Użycie
appgw.ingress.kubernetes.io/backend-protocol: "https"
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Ponowne zapisywanie zestawu reguł
Poniższa adnotacja umożliwia przypisanie istniejącej reguły ponownego zapisywania do odpowiedniej reguły routingu żądań.
Użycie
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Przykład
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rewrite-rule-set: add-custom-response-header
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080