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

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

  • O Gateway de Aplicativo não dá suporte a vários IPs na mesma porta (exemplo: 80/443). A entrada com anotação appgw.ingress.kubernetes.io/use-private-ip: "false" e outra com appgw.ingress.kubernetes.io/use-private-ip: "true" em HTTP fará com que o AGIC falhe ao atualizar o Gateway de Aplicativo.
  • 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 aviso NoPrivateIP.

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