feat: allow deploying with standalone mode (#665)
Signed-off-by: Ashish Tiwari <ashishjaitiwari15112000@gmail.com>
diff --git a/charts/apisix/README.md b/charts/apisix/README.md
index 3b9b239..fc39224 100644
--- a/charts/apisix/README.md
+++ b/charts/apisix/README.md
@@ -120,7 +120,7 @@
| dashboard.config.conf.etcd.prefix | string | `"/apisix"` | apisix configurations prefix |
| dashboard.config.conf.etcd.username | string | `nil` | Specifies etcd basic auth username if enable etcd auth |
| dashboard.enabled | bool | `false` | |
-| deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
+| deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled, standalone ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| deployment.role | string | `"traditional"` | Deployment role Optional: traditional, data_plane, control_plane ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| discovery.enabled | bool | `false` | Enable or disable Apache APISIX integration service discovery |
| discovery.registry | object | `{}` | Registry is the same to the one in APISIX [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L281), and refer to such file for more setting details. also refer to [this documentation for integration service discovery](https://apisix.apache.org/docs/apisix/discovery) |
diff --git a/charts/apisix/templates/_pod.tpl b/charts/apisix/templates/_pod.tpl
index 5677349..bfa5543 100644
--- a/charts/apisix/templates/_pod.tpl
+++ b/charts/apisix/templates/_pod.tpl
@@ -29,6 +29,9 @@
{{- . | toYaml | nindent 8 }}
{{- end }}
image: "{{ .Values.apisix.image.repository }}:{{ default .Chart.AppVersion .Values.apisix.image.tag }}"
+ {{- if eq .Values.deployment.mode "standalone" }}
+ command: ["sh", "-c","ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /docker-entrypoint.sh docker-start"]
+ {{- end }}
imagePullPolicy: {{ .Values.apisix.image.pullPolicy }}
env:
{{- if .Values.apisix.timezone }}
@@ -133,6 +136,10 @@
- -c
- "sleep 30"
volumeMounts:
+ {{- if eq .Values.deployment.mode "standalone" }}
+ - mountPath: /apisix-config
+ name: apisix-admin
+ {{- end }}
{{- if .Values.apisix.setIDFromPodUID }}
- mountPath: /usr/local/apisix/conf/apisix.uid
name: id
@@ -198,6 +205,11 @@
{{- toYaml .Values.extraInitContainers | nindent 4 }}
{{- end }}
volumes:
+ {{- if eq .Values.deployment.mode "standalone" }}
+ - configMap:
+ name: apisix.yaml
+ name: apisix-admin
+ {{- end }}
- configMap:
name: {{ include "apisix.fullname" . }}
name: apisix-config
diff --git a/charts/apisix/templates/apisix-config-configmap.yaml b/charts/apisix/templates/apisix-config-configmap.yaml
new file mode 100644
index 0000000..bcd297a
--- /dev/null
+++ b/charts/apisix/templates/apisix-config-configmap.yaml
@@ -0,0 +1,32 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- if eq .Values.deployment.mode "standalone" }}
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: apisix.yaml
+data:
+ apisix.yaml: |
+ routes:
+ -
+ uri: /hi
+ upstream:
+ nodes:
+ "127.0.0.1:1980": 1
+ type: roundrobin
+ #END
+{{- end }}
\ No newline at end of file
diff --git a/charts/apisix/templates/configmap.yaml b/charts/apisix/templates/configmap.yaml
index 436bb54..0edb553 100644
--- a/charts/apisix/templates/configmap.yaml
+++ b/charts/apisix/templates/configmap.yaml
@@ -53,7 +53,11 @@
{{- end }}
{{- end }}
enable_heartbeat: true
+ {{- if eq .Values.deployment.mode "standalone" }}
+ enable_admin: false
+ {{ else }}
enable_admin: {{ .Values.admin.enabled }}
+ {{- end }}
enable_admin_cors: {{ .Values.admin.cors }}
enable_debug: false
{{- if or .Values.customPlugins.enabled .Values.apisix.luaModuleHook.enabled }}
@@ -307,9 +311,10 @@
config_provider: etcd
{{- end }}
+
{{- if eq .Values.deployment.role "data_plane" }}
role_data_plane:
- config_provider: etcd
+ config_provider: {{- eq .Values.deployment.mode "standalone" | ternary "yaml" "etcd" | indent 1 }}
{{- end }}
{{- if not (eq .Values.deployment.role "data_plane") }}
@@ -353,7 +358,7 @@
{{- end }}
role: viewer
{{- end }}
-
+ {{- if not (eq .Values.deployment.mode "standalone")}}
etcd:
{{- if .Values.etcd.enabled }}
host: # it's possible to define multiple etcd hosts addresses of the same etcd cluster.
@@ -379,6 +384,7 @@
sni: "{{ .Values.etcd.auth.tls.sni }}"
{{- end }}
{{- end }}
+ {{- end }}
{{- end }}
diff --git a/charts/apisix/values.yaml b/charts/apisix/values.yaml
index 4d3f560..a04e3c1 100644
--- a/charts/apisix/values.yaml
+++ b/charts/apisix/values.yaml
@@ -207,7 +207,7 @@
deployment:
# -- Apache APISIX deployment mode
- # Optional: traditional, decoupled
+ # Optional: traditional, decoupled, standalone
#
# ref: https://apisix.apache.org/docs/apisix/deployment-modes/
mode: traditional
diff --git a/docs/en/latest/FAQ.md b/docs/en/latest/FAQ.md
index 2c5c5e6..a5d85c2 100644
--- a/docs/en/latest/FAQ.md
+++ b/docs/en/latest/FAQ.md
@@ -39,260 +39,7 @@
### How to install Apache APISIX running in standalone mode?
-Helm chart does not provide a direct way to deploy Apache APISIX running in standalone mode. You can install it in the following manner.
-
-Create a `deploy.yaml` with the following content.
-
-<Tabs
- groupId="version"
- defaultValue="3.0.0-beta"
- values={[
- {label: '3.0.0-beta', value: '3.0.0-beta'},
- {label: '2.15', value: '2.15'},
- ]}>
-
-<TabItem value="3.0.0-beta">
-
-```yaml
-# deploy.yaml
-kind: ConfigMap
-apiVersion: v1
-metadata:
- name: apisix-gw-config.yaml
-data:
- config.yaml: |
- deployment:
- role: data_plane
- role_data_plane:
- config_provider: yaml
----
-kind: ConfigMap
-apiVersion: v1
-metadata:
- name: apisix.yaml
-data:
- apisix.yaml: |
- routes:
- -
- uri: /hi
- upstream:
- nodes:
- "127.0.0.1:1980": 1
- type: roundrobin
- #END
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: apisix-deployment
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: apisix-deployment
- strategy:
- rollingUpdate:
- maxSurge: 50%
- maxUnavailable: 1
- type: RollingUpdate
- template:
- metadata:
- labels:
- app: apisix-deployment
- spec:
- terminationGracePeriodSeconds: 0
- containers:
- - livenessProbe:
- failureThreshold: 3
- initialDelaySeconds: 1
- periodSeconds: 2
- successThreshold: 1
- tcpSocket:
- port: 9080
- timeoutSeconds: 2
- readinessProbe:
- failureThreshold: 3
- initialDelaySeconds: 1
- periodSeconds: 2
- successThreshold: 1
- tcpSocket:
- port: 9080
- timeoutSeconds: 2
- image: "apache/apisix:2.99.0-centos"
- imagePullPolicy: IfNotPresent
- name: apisix-deployment
- # Create a soft link to link the apisix.yaml file in the mount directory to /usr/local/apisix/conf/apisix.yaml.
- command: ["sh", "-c","ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /docker-entrypoint.sh docker-start"]
- ports:
- - containerPort: 9080
- name: "http"
- protocol: "TCP"
- - containerPort: 9443
- name: "https"
- protocol: "TCP"
-
- volumeMounts:
- - mountPath: /usr/local/apisix/conf/config.yaml
- name: apisix-config-yaml-configmap
- subPath: config.yaml
- # configMap directory mounts
- - mountPath: /apisix-config
- name: apisix-admin
- volumes:
- - configMap:
- name: apisix-gw-config.yaml
- name: apisix-config-yaml-configmap
- - configMap:
- name: apisix.yaml
- name: apisix-admin
----
-apiVersion: v1
-kind: Service
-metadata:
- name: apisix-service
-spec:
- selector:
- app: apisix-deployment
- ports:
- - name: http
- port: 9080
- protocol: TCP
- targetPort: 9080
- - name: https
- port: 9443
- protocol: TCP
- targetPort: 9443
- type: NodePort
-```
-
-</TabItem>
-
-<TabItem value="2.15">
-
-```yaml
-# deploy.yaml
-kind: ConfigMap
-apiVersion: v1
-metadata:
- name: apisix-gw-config.yaml
-data:
- config.yaml: |
- apisix:
- enable_admin: false
- config_center: yaml
----
-kind: ConfigMap
-apiVersion: v1
-metadata:
- name: apisix.yaml
-data:
- apisix.yaml: |
- routes:
- -
- uri: /hi
- upstream:
- nodes:
- "127.0.0.1:1980": 1
- type: roundrobin
- #END
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: apisix-deployment
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: apisix-deployment
- strategy:
- rollingUpdate:
- maxSurge: 50%
- maxUnavailable: 1
- type: RollingUpdate
- template:
- metadata:
- labels:
- app: apisix-deployment
- spec:
- terminationGracePeriodSeconds: 0
- containers:
- - livenessProbe:
- failureThreshold: 3
- initialDelaySeconds: 1
- periodSeconds: 2
- successThreshold: 1
- tcpSocket:
- port: 9080
- timeoutSeconds: 2
- readinessProbe:
- failureThreshold: 3
- initialDelaySeconds: 1
- periodSeconds: 2
- successThreshold: 1
- tcpSocket:
- port: 9080
- timeoutSeconds: 2
- image: "apache/apisix:2.15.0-alpine"
- imagePullPolicy: IfNotPresent
- name: apisix-deployment
- # Create a soft link to link the apisix.yaml file in the mount directory to /usr/local/apisix/conf/apisix.yaml.
- command: ["sh", "-c", "ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /usr/bin/apisix init && /usr/bin/apisix init_etcd && /usr/local/openresty/bin/openresty -p /usr/local/apisix -g 'daemon off;'"]
- ports:
- - containerPort: 9080
- name: "http"
- protocol: "TCP"
- - containerPort: 9443
- name: "https"
- protocol: "TCP"
- volumeMounts:
- - mountPath: /usr/local/apisix/conf/config.yaml
- name: apisix-config-yaml-configmap
- subPath: config.yaml
- # configMap directory mounts
- - mountPath: /apisix-config
- name: apisix-admin
- volumes:
- - configMap:
- name: apisix-gw-config.yaml
- name: apisix-config-yaml-configmap
- - configMap:
- name: apisix.yaml
- name: apisix-admin
----
-apiVersion: v1
-kind: Service
-metadata:
- name: apisix-service
-spec:
- selector:
- app: apisix-deployment
- ports:
- - name: http
- port: 9080
- protocol: TCP
- targetPort: 9080
- - name: https
- port: 9443
- protocol: TCP
- targetPort: 9443
- type: NodePort
-```
-
-</TabItem>
-
-</Tabs>
-
-Apply the configuration in `deploy.yaml` to pod.
-
-```shell
-kubectl apply -f deploy.yaml
-```
-
-:::note
-1. The mount of the `apisix.yaml` file requires the injection of the softlink command, so do not change the configMap mount directory to `/usr/local/apisix/conf`, to avoid other configuration files being overwritten.
-2. The `apisix.yaml` is mounted as a configMap, so there will be a delay in reloading the rules after `apisix.yaml` is changed; please refer to this [document](https://kubernetes.io/docs/concepts/configuration/configmap/#mounted-configmaps-are-updated-automatically) for details.
-:::
+helm install apisix apisix/apisix --set deployment.mode=standalone --set etcd.enabled=false --set deployment.role=data_plane
### Why get 403 when I access Apache APISIX admin api?