在前一次K8S與APISIX的示範中,APISIX使用靜態檔案部署的方式。雖然靜態檔案方式並不難設定,也容易理解,但不一定適合管理。APISIX支援K8S的Ingress和Gateway API,並提供CRDs(Custom Resource Definitions),能夠更符合K8S生態和APISIX語義的方式定義路由規則。接著來看看怎麼將前一次反向代理Kubernetes-Dashboard服務的方式,改成使用APISIX CRDs方式設定。
首先,可以直接透過Helm安裝APISIX CRDs、APISIX和APISIX-Controller。但需要先設定Helm的Repo
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
在K8S環境裡的APISIX依然可以使用ETCD作為儲存設定提供者。不過我在使用helm安裝過程中,ETCD的image來源有點問題,因此改成使用實驗性質的Standalone API-driven mode。
新一點的APISIX-Controller應該具有模擬ETCD溝通介面的能力,可以使用傳統模式或解偶模式部署,但不需要而外的ETCD。請參考APISIX Ingress Controller:一种无需 etcd 的轻量级部署方式。
helm install apisix \
--namespace ingress-apisix \
--create-namespace \
--set apisix.deployment.role=traditional \
--set apisix.deployment.role_traditional.config_provider=yaml \
--set etcd.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.provider.type=apisix-standalone \
--set ingress-controller.apisix.adminService.namespace=ingress-apisix \
--set ingress-controller.gatewayProxy.createDefault=true \
apisix/apisix
注意最後的段落,這會提供外部存取APISIX的方式:
export NODE_PORT=$(kubectl get --namespace ingress-apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)
export NODE_IP=$(kubectl get nodes --namespace ingress-apisix -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
以我取得的結果是:http://192.168.49.2:30280
,不過目前瀏覽會是404找不到頁面。
類似設定上游,可以建立ApisixUpstream
物件,指定上游是minikube addon enable dashboard
的服務:
apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
name: kubernetes-dashboard
namespace: apisix
spec:
ingressClassName: apisix
timeout:
send: 10s
read: 10s
connect: 10s
scheme: http
loadbalancer:
type: roundrobin
externalNodes:
- name: kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local
type: Domain
weight: 10
port: 80
然後設定路由物件ApisixRoute
:
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: k8s-dashboard
namespace: apisix
spec:
ingressClassName: apisix
http:
- name: k8s-dashboard
match:
paths:
- /
- /*
upstreams:
- name: kubernetes-dashboard
weight: 100
現在,再嘗試存取方才取得的存取方式http://192.168.49.2:30280
,就會檢視Kubernetes-Dashbord頁面。
透過建立APISIX CRDs物件,可以管理、增減APISIX的路由。