Anotações para Gateway de Aplicação Controlador de Ingress

Apresentações

O recurso Kubernetes Ingress pode ser anotado com pares arbitrários de chave/valor. A AGIC baseia-se em anotações para programar Gateway de Aplicação funcionalidades, que não são configuráveis através do INgress YAML. As anotações ingres são aplicadas a todas as configurações HTTP, piscinas de backend e ouvintes derivados de um recurso de entrada.

Lista de anotações apoiadas

Para que um recurso Ingress seja observado pela AGIC, deve ser anotado com kubernetes.io/ingress.class: azure/application-gateway. Só então a AGIC trabalhará 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 backend

Esta anotação permite que o caminho de backend especificado num recurso de entrada seja reescrito com prefixo especificado nesta anotação. Isto permite que os utilizadores exponham serviços cujos pontos finais são diferentes dos nomes de pontos finais usados para expor um serviço num recurso de entrada.

Utilização

appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

No exemplo acima, definimos um recurso ingresso nomeado go-server-ingress-bkprefix com uma anotação appgw.ingress.kubernetes.io/backend-path-prefix: "/test/" . A anotação indica a porta de entrada da aplicação para criar uma definição HTTP, que terá um prefixo de caminho para o caminho /hello para /test/.

Nota

No exemplo acima, temos apenas uma regra definida. No entanto, as anotações são aplicáveis a todo o recurso ingresso, por isso, se um utilizador tivesse definido várias regras, o prefixo do caminho de backend seria configurado para cada um dos caminhos especificados. Assim, se um utilizador quiser regras diferentes com prefixos de caminhos diferentes (mesmo para o mesmo serviço) teria de definir diferentes recursos de entrada.

Redirecionamento de TLS

Gateway de Aplicação podem ser configurados para redirecionar automaticamente os URLs HTTP para as suas congéneres HTTPS. Quando esta anotação estiver presente e o TLS estiver devidamente configurado, o controlador Kubernetes Ingress criará uma regra de encaminhamento com uma configuração de redireccionamento e aplicará as alterações no seu Gateway de Aplicação. O redirecionamento criado será HTTP 301 Moved Permanently.

Utilização

appgw.ingress.kubernetes.io/ssl-redirect: "true"

Exemplo

apiVersion: extensions/v1beta1
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:
          serviceName: websocket-repeater
          servicePort: 80

Drenagem de ligação

connection-draining: Esta anotação permite que os utilizadores especifiquem se permitem a drenagem da ligação. connection-draining-timeout: Esta anotação permite que os utilizadores especifiquem um intervalo após o qual Gateway de Aplicação terminará os pedidos para o ponto final de retenção de drenagem.

Utilização

appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Esta anotação permite especificar se permite a afinidade baseada em cookies.

Utilização

appgw.ingress.kubernetes.io/cookie-based-affinity: "true"

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Tempo Limite do Pedido

Esta anotação permite especificar o tempo limite de pedido em segundos após o qual Gateway de Aplicação falhará o pedido se a resposta não for recebida.

Utilização

appgw.ingress.kubernetes.io/request-timeout: "20"

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Utilizar IP privado

Esta anotação permite-nos especificar se devemos expor este ponto final em PRIVATE IP de Gateway de Aplicação.

Nota

  • Gateway de Aplicação não suporta 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 on HTTP fará com appgw.ingress.kubernetes.io/use-private-ip: "true" que a AGIC falhe na atualização do Gateway de Aplicação.
  • Para Gateway de Aplicação que não tem um IP privado, Ingresses com appgw.ingress.kubernetes.io/use-private-ip: "true" será ignorado. Isto refletir-se-á nos registos do controlador e nos eventos de entrada para aqueles que se ingressam com NoPrivateIP aviso.

Utilização

appgw.ingress.kubernetes.io/use-private-ip: "true"

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Protocolo de Backend

Esta anotação permite-nos especificar o protocolo que Gateway de Aplicação deve usar enquanto fala com os Pods. Protocolos apoiados: http, https

Nota

  • Embora os certificados auto-assinados sejam suportados em Gateway de Aplicação, atualmente, a AGIC só suporta https quando os Pods estão usando certificado assinado por uma conhecida AC.
  • Certifique-se de que não utiliza a porta 80 com HTTPS e a porta 443 com HTTP nas cápsulas.

Utilização

appgw.ingress.kubernetes.io/backend-protocol: "https"

Exemplo

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 443

Reescreve conjunto de regras

Esta anotação permite-lhe atribuir uma regra de reescrita existente definida na regra de encaminhamento de pedido 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