應用程式閘道輸入控制器的註釋

Kubernetes 輸入資源可以使用任意金鑰/值組來標註。 AGIC 依賴註釋來設計應用程式閘道功能,而這些功能無法使用輸入 YAML 進行設定。 輸入註釋會套用至衍生自輸入資源的所有 HTTP 設定、後端集區和接聽程式。

支援的註釋清單

若要讓 AGIC 觀察到輸入資源,就必須使用 kubernetes.io/ingress.class: azure/application-gateway 進行標註。 只有在這時候,AGIC 才能與有問題的輸入資源搭配使用。

註釋金鑰 值類型 預設值 允許的值
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 (秒) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (秒) 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

後端路徑前置詞

下列註釋可重寫輸入資源中指定的後端路徑,並在註釋中指定前置詞。 這可讓使用者公開其端點與用來在輸入資源中公開服務的端點名稱不同的服務。

使用方式

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

範例

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

在上一個範例中,您已使用註釋 appgw.ingress.kubernetes.io/backend-path-prefix: "/test/" 來定義名稱為 go-server-ingress-bkprefix 的輸入資源。 註釋會告知應用程式閘道建立 HTTP 設定,其路徑前置詞會覆寫 /hello/test/ 的路徑。

注意

在上述範例中,只會定義一個規則。 不過,註釋適用於整個輸入資源,因此如果使用者定義多個規則,則會為每個指定的路徑設定後端路徑前置詞。 如果使用者想要為不同路徑前置詞設定不同規則 (甚至在相同的服務中),則需要定義不同的輸入資源。

TLS 重新導向

應用程式閘道可以設定為自動將 HTTP URL 重新導向至其 HTTPS 對應。 當此註釋存在且 TLS 已正確設定時,Kubernetes 輸入控制器會建立具有重新導向組態的路由規則,並將變更套用至您的應用程式閘道。 建立的重新導向為 HTTP 301 Moved Permanently

使用方式

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

範例

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

清空連線

connection-draining:此註釋可讓我們指定是否要啟用清空連線功能。 connection-draining-timeout:此註釋可讓我們指定逾時,接著應用程式閘道會終止清空後端端點的要求。

使用方式

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

範例

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

下列註釋可讓您指定是否要啟用 Cookie 型親和性。

使用方式

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

範例

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

要求逾時

下列註釋可讓您以秒為單位指定要求逾時,接著應用程式閘道的要求會在未收到回應時失敗。

使用方式

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

範例

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

使用私人 IP

下列註釋可讓您指定是否要在應用程式閘道的私人 IP 上公開此端點。

注意

  • 應用程式閘道不支援多個 IP 使用相同的連接埠 (範例:80/443)。 具有註釋 appgw.ingress.kubernetes.io/use-private-ip: "false" 的輸入和其他在 HTTP 上具有 appgw.ingress.kubernetes.io/use-private-ip: "true" 的輸入會造成 AGIC 在更新應用程式閘道時失敗。
  • 如果應用程式閘道沒有私人 IP,系統就會忽略具有 appgw.ingress.kubernetes.io/use-private-ip: "true" 的輸入。 這會反映在輸入包含 NoPrivateIP 警告的控制器記錄和輸入事件中。

使用方式

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

範例

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

後端通訊協定

下列註釋可讓您指定與 Pod 通訊時,應用程式閘道應使用的通訊協定。 支援的通訊協定為 httphttps

注意

雖然應用程式閘道支援自我簽署憑證,但目前在 Pod 使用知名 CA 簽署憑證的情況下,AGIC 僅支援 https

請勿在 Pod 上將連接埠 80 和 HTTPS 搭配使用,以及連接埠 443 和 HTTP 搭配使用。

使用方式

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

範例

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

重寫規則集

下列註釋可讓您將現有的重寫規則集指派給對應的要求路由規則。

使用方式

appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>

範例

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