配置示例
API7 Ingress Controller 和 APISIX Ingress Controller 都支持使用 Ingress 资源和 Gateway API 管理 Kubernetes 流量。两者均受支持,但 Gateway API 提供了更高的灵活性和可扩展性,建议新用户在后续部署中采用 Gateway API。
除了这些标准的 Kubernetes API 之外,Ingress Controller 还支持一组专为 APISIX 原生功能设计的 CRD(自定义资源定义)。
本文档提供了常见配置的示例,涵盖了如何以及何时使用这些资源。你应该根据你的环境调整自定义值,例如命名空间、路由 URI 和凭证。
配置控制面端点和管理员密钥
要在运行时更新 Ingress Controller 与控制面之间连接所使用的控制面端点和管理员密钥:
apiVersion: apisix.apache.org/v1alpha1
kind: GatewayProxy
metadata:
namespace: aic
name: apisix-config
spec:
provider:
type: ControlPlane
controlPlane:
endpoints:
- http://127.0.0.1:9180
auth:
type: AdminKey
adminKey:
value: replace-with-your-admin-key # 替换为你的管理员密钥
定义 Ingress Controller 和网关
在应用进一步配置之前,指定负责处理资源的 Ingress Controller:
- Gateway API
- Ingress
- APISIX CRD
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: apisix
spec:
controllerName: "apisix.apache.org/apisix-ingress-controller"
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
namespace: aic
name: apisix
spec:
gatewayClassName: apisix
listeners:
- name: http
protocol: HTTP
port: 80
infrastructure:
parametersRef:
group: apisix.apache.org
kind: GatewayProxy
name: apisix-config
❶ 如果在同一个集群中运行多个不同的 Ingress Controller 实例(而不是具有多个副本的单个实例),则应自定义控制器名称。每个 Ingress Controller 实例必须在其配置文件中使用唯一的控制器名称,并且相应的 GatewayClass 应引用该值。
❷ 被引用资源的 API 组。
❸ 被引用资源的种类。
❹ 被引用资源的名称。应与 GatewayProxy 资源的 metadata.name 匹配。
port 用于选择 Gateway 监听器,但不会打开数据面端口。有关可选的物理端口匹配,请参阅配置文件。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: apisix
spec:
controller: apisix.apache.org/apisix-ingress-controller
parameters:
apiGroup: apisix.apache.org
kind: GatewayProxy
name: apisix-config
namespace: aic
scope: Namespace
❶ 如果在同 一个集群中运行多个不同的 Ingress Controller 实例(而不是具有多个副本的单个实例),则应自定义控制器名称。每个 Ingress Controller 实例必须在其配置文件中使用唯一的控制器名称,并且相应的 IngressClass 应引用该值。
❷ 被引用资源的 API 组。
❸ 被引用资源的种类。
❹ 被引用资源的名称。应与 GatewayProxy 资源的 metadata.name 匹配。
❺ 定义被引用资源的命名空间。
❻ 被引用资源的作用域。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: apisix
spec:
controller: apisix.apache.org/apisix-ingress-controller
parameters:
apiGroup: apisix.apache.org
kind: GatewayProxy
name: apisix-config
namespace: aic
scope: Namespace
❶ 如果在同一个集群中运行多个不同的 Ingress Controller 实例(而不是具有多个副本的单个实例),则应自定义控制器名称。每个 Ingress Controller 实例必须在其配置文件中使用唯一的控制器名称,并且相应的 IngressClass 应引用该值。
❷ 被引用资源的 API 组。
❸ 被引用资源的种类。
❹ 被引用资源的名称。应与 GatewayProxy 资源的 metadata.name 匹配。
❺ 定义被引用资源的命名空间。
❻ 被引用资源的作用域。
路由到 Kubernetes 服务
创建一条路由,将请求代理到 Kubernetes 上的服务:
- Gateway API
- Ingress
- APISIX CRD
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: httpbin
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /ip
backendRefs:
- name: httpbin
port: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: aic
name: httpbin
spec:
ingressClassName: apisix
rules:
- http:
paths:
- path: /ip
pathType: Exact
backend:
service:
name: httpbin
port:
number: 80
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: httpbin
spec:
ingressClassName: apisix
http:
- name: httpbin
match:
paths:
- /ip
backends:
- serviceName: httpbin
servicePort: 80
路由到外部服务
创建一条路由,将请求代理到公共托管的服务:
- Gateway API
- Ingress
- APISIX CRD
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: httpbin-external-domain
spec:
type: ExternalName
externalName: httpbin.org
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: get-ip
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /ip
backendRefs:
- name: httpbin-external-domain
port: 80
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: httpbin-external-domain
spec:
type: ExternalName
externalName: httpbin.org
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: aic
name: get-ip
spec:
ingressClassName: apisix
rules:
- http:
paths:
- path: /ip
pathType: Exact
backend:
service:
name: httpbin-external-domain
port:
number: 80
apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
namespace: aic
name: httpbin-external-domain
spec:
ingressClassName: apisix
externalNodes:
- type: Domain
name: httpbin.org
---
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: get-ip
spec:
ingressClassName: apisix
http:
- name: get-ip
match:
paths:
- /ip
upstreams:
- name: httpbin-external-domain