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

介紹

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: 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

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

注意

在上述範例中,我們只會定義一個規則。 不過,批註適用于整個輸入資源,因此如果使用者已定義多個規則,則會針對指定的每個路徑設定後端路徑前置詞。 因此,如果使用者想要具有不同路徑前置詞的不同規則, (即使針對相同的服務) 他們也需要定義不同的輸入資源。

TLS 重新導向

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

使用狀況

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

範例

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

連線清空

connection-draining:此批註可讓使用者指定是否要啟用連線清空。 connection-draining-timeout:此批註可讓使用者指定逾時,之後應用程式閘道會終止清空後端端點的要求。

使用狀況

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

範例

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

此批註允許指定是否要啟用 Cookie 型親和性。

使用狀況

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

範例

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

要求逾時

如果未收到回應,此批註允許以秒為單位指定要求逾時,應用程式閘道將會失敗要求。

使用狀況

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

範例

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

使用私人 IP

此批註可讓我們指定是否要在應用程式閘道的私人 IP 上公開此端點。

注意

  • 應用程式閘道不支援相同埠上的多個 IP (範例:80/443) 。 具有批註 appgw.ingress.kubernetes.io/use-private-ip: "false" 的輸入和 on 的另 HTTPappgw.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: 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

後端通訊協定

此批註可讓我們指定與 Pod 交談時,應用程式閘道應使用的通訊協定。 支援的通訊協定: httphttps

注意

  • 雖然自我簽署憑證在應用程式閘道上受到支援,但目前只有使用由已知 CA 簽署的憑證時,AGIC 才支援 https
  • 請務必不要在 Pod 上使用埠 80 搭配 HTTPS 和埠 443 與 HTTP。

使用狀況

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

範例

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

重寫規則集

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

使用狀況

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