feat: add more config for gatewayproxy (#885)
diff --git a/charts/apisix-ingress-controller/README.md b/charts/apisix-ingress-controller/README.md
index 886ada1..bf3dd3e 100644
--- a/charts/apisix-ingress-controller/README.md
+++ b/charts/apisix-ingress-controller/README.md
@@ -141,11 +141,19 @@
| deployment.tolerations | list | `[]` | |
| deployment.topologySpreadConstraints | list | `[]` | Topology Spread Constraints for pod assignment spread across your cluster among failure-domains ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods |
| fullnameOverride | string | `""` | |
-| gatewayProxy.createDefault | bool | `false` | |
-| gatewayProxy.provider.controlPlane.auth.adminKey.value | string | `"edd1c9f034335f136f87ad84b625c8f1"` | |
-| gatewayProxy.provider.controlPlane.auth.type | string | `"AdminKey"` | |
-| gatewayProxy.provider.controlPlane.endpoints | list | `[]` | |
-| gatewayProxy.provider.type | string | `"ControlPlane"` | |
+| gatewayProxy.createDefault | bool | `false` | Controls whether to create a default GatewayProxy custom resource. |
+| gatewayProxy.provider | object | `{"controlPlane":{"auth":{"adminKey":{"value":"edd1c9f034335f136f87ad84b625c8f1","valueFrom":{}},"type":"AdminKey"},"endpoints":[],"service":{"name":"","port":9180}},"pluginMetadata":{},"plugins":[],"type":"ControlPlane"}` | Configuration for the GatewayProxy provider connection |
+| gatewayProxy.provider.controlPlane | object | `{"auth":{"adminKey":{"value":"edd1c9f034335f136f87ad84b625c8f1","valueFrom":{}},"type":"AdminKey"},"endpoints":[],"service":{"name":"","port":9180}}` | ControlPlane provider specific configuration Either `endpoints` or `service` must be specified, but not both. |
+| gatewayProxy.provider.controlPlane.auth | object | `{"adminKey":{"value":"edd1c9f034335f136f87ad84b625c8f1","valueFrom":{}},"type":"AdminKey"}` | Authentication configuration for control plane connection |
+| gatewayProxy.provider.controlPlane.auth.adminKey | object | `{"value":"edd1c9f034335f136f87ad84b625c8f1","valueFrom":{}}` | AdminKey authentication configuration. Either `value` or `valueFrom` must be specified, but not both. |
+| gatewayProxy.provider.controlPlane.auth.adminKey.value | string | `"edd1c9f034335f136f87ad84b625c8f1"` | The admin key value for authentication. |
+| gatewayProxy.provider.controlPlane.auth.adminKey.valueFrom | object | `{}` | Reference to admin key stored in a Kubernetes Secret |
+| gatewayProxy.provider.controlPlane.auth.type | string | `AdminKey` | Authentication type. Only `AdminKey` is currently supported. |
+| gatewayProxy.provider.controlPlane.endpoints | list | `[]` | List of APISIX control plane Admin API endpoints. example: ["http://apisix-admin.default.svc.cluster.local:9180"] |
+| gatewayProxy.provider.controlPlane.service | object | `{"name":"","port":9180}` | Alternatively, reference a Kubernetes Service for the APISIX Admin API. |
+| gatewayProxy.provider.pluginMetadata | object | `{}` | Global plugin metadata shared by all instances of the same plugin. |
+| gatewayProxy.provider.plugins | list | `[]` | List of global plugins to be enabled on the GatewayProxy. |
+| gatewayProxy.provider.type | string | `"ControlPlane"` | Specifies the provider type for the GatewayProxy. |
| labelsOverride | object | `{}` | Override default labels assigned to Apache APISIX ingress controller resource |
| nameOverride | string | `""` | Default values for apisix-ingress-controller. This is a YAML-formatted file. Declare variables to be passed into your templates. |
| podDisruptionBudget | object | `{"enabled":false,"maxUnavailable":1,"minAvailable":"90%"}` | See https://kubernetes.io/docs/tasks/run-application/configure-pdb/ for more details |
diff --git a/charts/apisix-ingress-controller/templates/gatewayproxy.yaml b/charts/apisix-ingress-controller/templates/gatewayproxy.yaml
index 8c767cb..69bc6ea 100644
--- a/charts/apisix-ingress-controller/templates/gatewayproxy.yaml
+++ b/charts/apisix-ingress-controller/templates/gatewayproxy.yaml
@@ -24,11 +24,53 @@
provider:
type: {{ .Values.gatewayProxy.provider.type }}
controlPlane:
+ {{- if .Values.gatewayProxy.provider.controlPlane.endpoints }}
+ endpoints:
+ {{- toYaml .Values.gatewayProxy.provider.controlPlane.endpoints | nindent 8 }}
+ {{- else if .Values.gatewayProxy.provider.controlPlane.service.name }}
+ service:
+ name: {{ .Values.gatewayProxy.provider.controlPlane.service.name }}
+ port: {{ .Values.gatewayProxy.provider.controlPlane.service.port }}
+ {{- else }}
service:
name: {{ .Values.apisix.adminService.name }}
port: {{ .Values.apisix.adminService.port }}
+ {{- end }}
+
+ {{- with .Values.gatewayProxy.provider.controlPlane.tlsVerify }}
+ tlsVerify: {{ . }}
+ {{- end }}
+
{{- with .Values.gatewayProxy.provider.controlPlane.auth }}
auth:
- {{- toYaml . | nindent 8 }}
+ type: {{ .type }}
+ {{- with .adminKey }}
+ adminKey:
+ {{- if .valueFrom }}
+ valueFrom:
+ {{- toYaml .valueFrom | nindent 12 }}
+ {{- else if .value }}
+ value: {{ .value | quote }}
+ {{- end }}
+ {{- end }}
{{- end }}
+
+ {{- with .Values.gatewayProxy.publishService }}
+ publishService: {{ . | quote }}
+ {{- end }}
+
+ {{- with .Values.gatewayProxy.statusAddress }}
+ statusAddress:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+
+ {{- with .Values.gatewayProxy.plugins }}
+ plugins:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+
+ {{- with .Values.gatewayProxy.pluginMetadata }}
+ pluginMetadata:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
{{- end }}
diff --git a/charts/apisix-ingress-controller/values.yaml b/charts/apisix-ingress-controller/values.yaml
index ec68e3a..6703473 100644
--- a/charts/apisix-ingress-controller/values.yaml
+++ b/charts/apisix-ingress-controller/values.yaml
@@ -94,17 +94,67 @@
ingressClass: apisix
defaultIngressClass: false
+# The GatewayProxy resource configures gateway proxy instances including networking,
+# provider connection, global plugins, and plugin metadata.
gatewayProxy:
+ # -- Controls whether to create a default GatewayProxy custom resource.
createDefault: false
+
+ # -- Configuration for the GatewayProxy provider connection
provider:
+ # -- Specifies the provider type for the GatewayProxy.
type: ControlPlane
+
+ # -- ControlPlane provider specific configuration
+ # Either `endpoints` or `service` must be specified, but not both.
controlPlane:
+ # -- List of APISIX control plane Admin API endpoints.
+ # example: ["http://apisix-admin.default.svc.cluster.local:9180"]
endpoints: []
+
+ # -- Alternatively, reference a Kubernetes Service for the APISIX Admin API.
+ service:
+ name: ""
+ port: 9180
+
+ # -- Authentication configuration for control plane connection
auth:
+ # -- Authentication type. Only `AdminKey` is currently supported.
+ # @default -- `AdminKey`
type: AdminKey
+
+ # -- AdminKey authentication configuration.
+ # Either `value` or `valueFrom` must be specified, but not both.
adminKey:
+ # -- The admin key value for authentication.
value: "edd1c9f034335f136f87ad84b625c8f1"
+ # -- Reference to admin key stored in a Kubernetes Secret
+ valueFrom: {}
+ # secretKeyRef:
+ # name: apisix-admin-secret
+ # key: admin-key
+
+ # -- List of global plugins to be enabled on the GatewayProxy.
+ plugins: []
+ # - name: cors
+ # enabled: true
+ # config:
+ # allow_origins: "*"
+ # allow_methods: "GET,POST,PUT,DELETE"
+ # - name: ip-restriction
+ # enabled: false
+ # config:
+ # whitelist:
+ # - 10.0.0.0/8
+ # - 192.168.0.0/16
+
+ # -- Global plugin metadata shared by all instances of the same plugin.
+ pluginMetadata: {}
+ # prometheus:
+ # disable: false
+ # export_uri: /apisix/prometheus/metrics
+
apisix:
adminService:
namespace: apisix-ingress