Anotações do Controlador de Entrada do Gateway de Aplicativo
O recurso de Entrada do Kubernetes pode ser anotado com pares de chave/valor arbitrários. O AGIC se baseia em anotações para programar recursos do Gateway de Aplicativo, que não são configuráveis usando o YAML de Entrada. As anotações de entrada são aplicadas a todas as configurações de HTTP, pools de back-end e ouvintes derivados de um recurso de entrada.
Lista de anotações com suporte
Para que um recurso de entrada seja observado pelo AGIC, ele deve ser anotado com kubernetes.io/ingress.class: azure/application-gateway
. Somente o AGIC funciona com o recurso de entrada em questão.
Chave de Anotação | Tipo de valor | Valor padrão | Valores permitidos |
---|---|---|---|
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 (segundos) |
30 |
|
appgw.ingress.kubernetes.io/cookie-based-affinity | bool |
false |
|
appgw.ingress.kubernetes.io/request-timeout | int32 (segundos) |
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 |
Prefixo do Caminho de Back-end
A anotação a seguir permite que o caminho de back-end especificado em um recurso de entrada seja reescrito com o prefixo especificado nesta anotação. Isso permite que os usuários exponham serviços cujos pontos de extremidade são diferentes dos nomes de ponto de extremidades usados para expor um serviço em um recurso de entrada.
Uso
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Exemplo
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
No exemplo anterior, você definiu um recurso de entrada chamado go-server-ingress-bkprefix
com uma anotação appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. A anotação informa ao gateway de aplicativo para criar uma configuração de HTTP, que tem uma substituição de prefixo de caminho do caminho /hello
para /test/
.
Observação
No exemplo acima, apenas uma regra é definida. No entanto, as anotações são aplicáveis a todo o recurso de entrada. Portanto, se um usuário definisse várias regras, o prefixo de caminho de back-end seria configurado para cada um dos caminhos especificados. Se um usuário quiser regras diferentes com prefixos de caminho diferentes (mesmo para o mesmo serviço), ele precisaria definir recursos de entrada diferentes.
Redirecionamento de TLS
O Gateway de Aplicativo pode ser configurado para redirecionar automaticamente URLs HTTP para seus HTTPS correspondentes. Quando essa anotação estiver presente e o TLS estiver configurado corretamente, o controlador de Entrada do Kubernetes criará uma regra de roteamento com uma configuração de redirecionamento e aplicará as alterações ao seu Gateway de Aplicativo. O redirecionamento criado será o HTTP 301 Moved Permanently
.
Uso
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Exemplo
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
Esvaziamento de Conexões
connection-draining
: essa anotação permite especificar se o esvaziamento de conexões deve ser habilitado.
connection-draining-timeout
: essa anotação permite especificar um tempo limite após o qual o Gateway de Aplicativo encerra as solicitações para o ponto de extremidade de back-end de esvaziamento.
Uso
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Exemplo
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
Afinidade Baseada em Cookies
A anotação a seguir permite especificar se a afinidade baseada em cookies deve ser habilitada.
Uso
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Exemplo
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
Tempo Limite da Solicitação
A anotação a seguir permite especificar o tempo limite da solicitação em segundos após o qual o Gateway de Aplicativo falhará na solicitação se a resposta não for recebida.
Uso
appgw.ingress.kubernetes.io/request-timeout: "20"
Exemplo
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
Usar IP Privado
A anotação a seguir permite especificar se esse ponto de extremidade deve ser exposto no IP Privado do Gateway de Aplicativo.
Observação
- Para o Gateway de Aplicativo que não tem um IP privado, Entradas com
appgw.ingress.kubernetes.io/use-private-ip: "true"
são ignoradas. Isso é refletido nos logs do controlador e nos eventos de entrada para as entradas com o avisoNoPrivateIP
.
Uso
appgw.ingress.kubernetes.io/use-private-ip: "true"
Exemplo
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
Protocolo de Back-end
A anotação a seguir permite que você especifique o protocolo que Gateway de Aplicativo deve usar durante a comunicação com os pods. Os protocolos com suporte são http
e https
.
Observação
Embora os certificados autoassinados tenham suporte no Gateway de Aplicativo, atualmente, o AGIC dá suporte apenas ao https
quando os pods estão usando um certificado assinado por uma autoridade de certificação conhecida.
Não use a porta 80 com HTTPS e a porta 443 com HTTP nos Pods.
Uso
appgw.ingress.kubernetes.io/backend-protocol: "https"
Exemplo
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
Regenerar o conjunto de regras
A anotação a seguir permite que você atribua um conjunto de regras de regeneração existente para a regra de roteamento de solicitação correspondente.
Uso
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Exemplo
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