你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
应用程序网关入口控制器的批注
可以用任意键/值对来批注 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 重定向
可将应用程序网关配置为向其 HTTPS 对等方自动重定向 HTTP URL。 如果此批注存在且已正确配置 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 的相关性
使用以下注释可指定是否启用基于 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 的应用程序网关,将忽略带有
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 进行通信时应使用的协议。 支持的协议为 http
和 https
。
注意
应用程序网关支持自签名的证书,不过,目前仅当 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