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 Ingress 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.
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 de 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.
Nome do host de back-end
Essa anotação nos permite especificar o nome do host que o Application Gateway deve usar ao falar com os Pods.
Utilização
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
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-hostname: "internal.example.com"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Sonda de integridade personalizada
O Application Gateway pode ser configurado para enviar testes de integridade personalizados para o pool de endereços de back-end. Quando essas anotações estão presentes, o controlador Kubernetes Ingress cria uma sonda personalizada para monitorar o aplicativo back-end e aplica as alterações ao gateway de aplicativo.
health-probe-hostname
: Esta anotação permite um nome de host personalizado no teste de integridade.
health-probe-port
: Esta anotação configura uma porta de teste de integridade personalizada.
health-probe-path
: Esta anotação define um caminho para a sonda de integridade.
health-probe-status-code
: Esta anotação permite que o teste de integridade aceite diferentes códigos de status HTTP.
health-probe-interval
: Esta anotação define o intervalo em que a sonda de integridade é executada.
health-probe-timeout
: Esta anotação define quanto tempo a sonda de integridade aguardará por uma resposta antes de falhar na sonda.
health-probe-unhealthy-threshold
: Esta anotação define quantas sondas de integridade devem falhar para que o back-end seja marcado como não íntegro.
Utilização
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 80
appgw.ingress.kubernetes.io/health-probe-path: "/"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 30
appgw.ingress.kubernetes.io/health-probe-timeout: 30
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 81
appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 31
appgw.ingress.kubernetes.io/health-probe-timeout: 31
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
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
- 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-privateip
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Substituir porta de front-end
A anotação permite configurar um ouvinte frontend para usar portas diferentes de 80/443 para http/https.
Se a porta estiver dentro do intervalo autorizado do App Gw (1 - 64999), esse ouvinte será criado nessa porta específica. Se uma porta inválida ou nenhuma porta for definida na anotação, a configuração retornará ao padrão 80 ou 443.
Utilização
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-overridefrontendport
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/override-frontend-port: "8080"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Nota
Solicitação externa precisará segmentar http://somehost:8080 em vez de http://somehost.
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: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Extensão Hostname
O Application Gateway pode ser configurado para aceitar vários nomes de host. A anotação de extensão de nome de host permite isso, permitindo que você defina vários nomes de host, incluindo nomes de host curinga. Isso acrescentará os nomes de host ao FQDN definido no ingress spec.rules.host no ouvinte frontend para que ele seja configurado como um ouvinte multissite.
Utilização
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-multisite
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
spec:
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Nota
No exemplo acima, o ouvinte seria configurado para aceitar tráfego para os nomes de host "hostname1.contoso.com" e "hostname2.contoso.com"
Política do WAF para o caminho
Essa anotação permite anexar uma política WAF já criada aos caminhos de lista para um host dentro de um recurso de Ingresso do Kubernetes que está sendo anotado.
Utilização
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ad-server-ingress
namespace: commerce
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /ad-server
backend:
service:
name: ad-server
port:
number: 80
pathType: Exact
- path: /auth
backend:
service:
name: auth-server
port:
number: 80
pathType: Exact
Nota
A política WAF será aplicada às URLs /ad-server e /auth.
Certificado SSL do Application Gateway
O certificado SSL pode ser configurado para o Gateway de Aplicativo a partir de um arquivo de certificado PFX local ou de uma referência a uma ID secreta sem versão do Cofre da Chave do Azure. Quando a anotação estiver presente com um nome de certificado e o certificado estiver pré-instalado no Application Gateway, o controlador Kubernetes Ingress criará uma regra de roteamento com um ouvinte HTTPS e aplicará as alterações ao seu App Gateway. A anotação appgw-ssl-certificate também pode ser usada em conjunto com a anotação ssl-redirect em caso de redirecionamento SSL.
Consulte o recurso appgw-ssl-certificate para obter mais detalhes.
Nota
A anotação "appgw-ssl-certificate" será ignorada quando a especificação TLS for definida na entrada ao mesmo tempo. Se um usuário quiser certificados diferentes com hosts diferentes (terminação de certificado multi tls), ele precisará definir recursos de entrada diferentes.
Utilização
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Perfil SSL do Application Gateway
Os usuários podem configurar um perfil ssl no Application Gateway por ouvinte. Quando a anotação estiver presente com um nome de perfil e o perfil estiver pré-instalado no Application Gateway, o controlador Kubernetes Ingress criará uma regra de roteamento com um ouvinte HTTPS e aplicará as alterações ao seu App Gateway.
Utilização
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Certificado raiz confiável do Application Gateway
Os usuários agora podem configurar seus próprios certificados raiz para o Application Gateway para serem confiáveis via AGIC. A anotação appgw-trusted-root-certificate pode ser usada em conjunto com o protocolo de back-end de anotação para indicar criptografia ssl de ponta a ponta, vários certificados raiz, separados por vírgula, se especificado, por exemplo, "name-of-my-root-cert1,name-of-my-root-certificate2".
Utilização
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
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
Reescrever recurso personalizado do conjunto de regras
Nota
Foi lançado o Application Gateway for Containers , que introduz inúmeras alterações de desempenho, resiliência e recursos. Considere aproveitar o Application Gateway for Containers para sua próxima implantação. As regras de reconfiguração de URL para o Application Gateway for Containers podem ser encontradas aqui para a API do Gateway e aqui para a API de Ingresso. As regras de reconfiguração de cabeçalho para o Application Gateway for Containers podem ser encontradas aqui para a API do gateway.
Nota
Este recurso é suportado desde 1.6.0-rc1. Use appgw.ingress.kubernetes.io/rewrite-rule-set
, que permite usar um conjunto de regras de reescrita existente no Application Gateway.
O Application Gateway permite reescrever o conteúdo selecionado de solicitações e respostas. Com esse recurso, você pode traduzir URLs, parâmetros de cadeia de caracteres de consulta, bem como modificar cabeçalhos de solicitação e resposta. Ele também permite que você adicione condições para garantir que a URL ou os cabeçalhos especificados sejam reescritos somente quando determinadas condições forem atendidas. Estas condições baseiam-se nas informações do pedido e da resposta. Reescrever recurso personalizado do conjunto de regras traz esse recurso para o AGIC.
Os cabeçalhos HTTP permitem que um cliente e um servidor passem informações adicionais com uma solicitação ou resposta. Ao reescrever esses cabeçalhos, você pode realizar tarefas importantes, como adicionar campos de cabeçalho relacionados à segurança, como HSTS/ X-XSS-Protection, remover campos de cabeçalho de resposta que possam revelar informações confidenciais e remover informações de porta de cabeçalhos X-Forwarded-For.
Com o recurso de regravação de URL, você pode: - Reescrever o nome do host, o caminho e a cadeia de caracteres de consulta da URL da solicitação - Optar por reescrever a URL de todas as solicitações ou apenas as solicitações que correspondem a uma ou mais das condições que você definiu. Essas condições são baseadas nas propriedades de solicitação e resposta (cabeçalho da solicitação, cabeçalho da resposta e variáveis do servidor). - Escolha rotear a solicitação com base no URL original ou no URL reescrito
Utilização
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Exemplo
apiVersion: appgw.ingress.azure.io/v1beta1
kind: AzureApplicationGatewayRewrite
metadata:
name: my-rewrite-rule-set-custom-resource
spec:
rewriteRules:
- name: rule1
ruleSequence: 21
conditions:
- ignoreCase: false
negate: false
variable: http_req_Host
pattern: example.com
actions:
requestHeaderConfigurations:
- actionType: set
headerName: incoming-test-header
headerValue: incoming-test-value
responseHeaderConfigurations:
- actionType: set
headerName: outgoing-test-header
headerValue: outgoing-test-value
urlConfiguration:
modifiedPath: "/api/"
modifiedQueryString: "query=test-value"
reroute: false
Prioridade das Regras
Essa anotação permite que o controlador de entrada do gateway de aplicativo defina explicitamente a prioridade das Regras de Roteamento de Solicitação associadas .
Utilização
appgw.ingress.kubernetes.io/rule-priority:
Exemplo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-rulepriority
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rule-priority: 10
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080
No exemplo acima, a regra de roteamento de solicitação teria uma prioridade de 10 set.