Anotações para o Application Gateway Ingress Controller
O recurso Kubernetes Ingress pode ser anotado com pares arbitrários de chave/valor. A AGIC depende de anotações para programar recursos do Application Gateway, que não são configuráveis usando o Ingress YAML. As anotações de entrada são aplicadas a todas as configurações HTTP, pools de back-end e ouvintes derivados de um recurso de entrada.
Lista de anotações suportadas
Para que um recurso de Ingresso seja observado pela AGIC, ele deve ser anotado com kubernetes.io/ingress.class: azure/application-gateway
. Só então a AGIC trabalha com o recurso Ingress em questão.
Chave de anotação | Tipo de valor | Valor Predefinido | 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 nessa anotação. Ele permite que os usuários exponham serviços cujos pontos de extremidade são diferentes dos nomes de ponto de extremidade usados para expor um serviço em um recurso de entrada.
Utilização
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 nomeado go-server-ingress-bkprefix
com uma anotação appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. A anotação informa ao gateway do aplicativo para criar uma configuração HTTP, que tem uma substituição de prefixo de caminho para o caminho /hello
para /test/
.
Nota
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 do 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 precisará definir recursos de entrada diferentes.
Redirecionamento TLS
O Application Gateway pode ser configurado para redirecionar automaticamente URLs HTTP para suas contrapartes HTTPS. Quando essa anotação está presente e o TLS está configurado corretamente, o controlador Kubernetes Ingress cria uma regra de roteamento com uma configuração de redirecionamento e aplica as alterações ao seu Application Gateway. O redirecionamento criado será HTTP 301 Moved Permanently
.
Utilização
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
Drenagem de conexões
connection-draining
: Esta anotação nos permite especificar se a drenagem de conexão deve ser ativada.
connection-draining-timeout
: Essa anotação nos permite especificar um tempo limite, após o qual o Application Gateway encerra as solicitações para o ponto de extremidade de back-end de drenagem.
Utilização
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 que você especifique se deseja habilitar a afinidade baseada em cookies.
Utilização
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 do Pedido
A anotação a seguir permite especificar o tempo limite da solicitação em segundos, após o qual o Application Gateway falhará na solicitação se a resposta não for recebida.
Utilização
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 Application Gateway.
Nota
- O Application Gateway não suporta vários IPs na mesma porta (exemplo: 80/443). Ingressar com anotação
appgw.ingress.kubernetes.io/use-private-ip: "false"
e outro com onHTTP
fará comappgw.ingress.kubernetes.io/use-private-ip: "true"
que o AGIC falhe durante a atualização do Application Gateway. - Para o Application Gateway que não tem um IP privado, Ingresses with
appgw.ingress.kubernetes.io/use-private-ip: "true"
é ignorado. Isso se reflete nos logs do controlador e nos eventos de entrada para essas entradas comNoPrivateIP
aviso.
Utilização
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 especificar o protocolo que o Application Gateway deve usar durante a comunicação com os pods. Os protocolos suportados são http
e https
.
Nota
Embora os certificados autoassinados sejam suportados no Application Gateway, atualmente o AGIC só oferece suporte https
quando os pods estão usando um certificado assinado por uma CA conhecida.
Não use a porta 80 com HTTPS e a porta 443 com HTTP nos pods.
Utilização
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
Reescrever conjunto de regras
A anotação a seguir permite atribuir um conjunto de regras de regravação existente à regra de roteamento de solicitação correspondente.
Utilização
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