阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller

在k8s上安装apisix全家,通过helm安装很简单,但是会遇到一些问题。

安装

首先登录阿里云控制台,在ACK集群详情页,进入CloudShell,执行下面helm命令安装apisix、apisix-ectd、apisix-dashboard和apisix-ingress-controller。

shell 复制代码
helm repo add apisix https://charts.apiseven.com && helm repo update && helm upgrade --install apisix apisix/apisix --create-namespace  --namespace apisix --set dashboard.enabled=true --set ingress-controller.enabled=true --set ingress-controller.config.apisix.serviceNamespace=apisix

也可以分成三步执行

shell 复制代码
# 添加repo
helm repo add apisix https://charts.apiseven.com
# 
helm repo update
# 安装chart
helm upgrade --install apisix apisix/apisix --create-namespace  --namespace apisix --set dashboard.enabled=true --set ingress-controller.enabled=true --set ingress-controller.config.apisix.serviceNamespace=apisix

执行完命令安装的服务:

  • apisix:网关,对应的Service资源有apisix-gateway、apisix-admin。
  • apisix-dashboard:管理后台,对应的Service资源是apisix-dashboard。
  • apisix-ingress-controller:apisix的Ingress Controller,实现将k8s官方提供的Ingress资源,或是apisix自定义的资源ApisixRoute,转为apisix的配置存储到apisix的etcd。
  • apisix-etcd:apisix的etcd集群。

apisix-etcd部署遇到的问题

其中apisix-etcd是有状态服务,部署3个节点,需要用到3个存储卷。

PVC的声明如下:

yaml 复制代码
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  volumeMode: Filesystem

因此,我们需要到ECS购买3块云盘(云服务器ECS->存储与快照->云盘->创建云盘),用来做持久化存储卷。需要注意,购买的云盘所在的可用区,必须和集群在同一个可用区,否则无法挂盘成功。

购买成功后,在ack集群服务下,存储->存储卷,创建3个存储卷,类型勾选云盘,然后选择购买好的云盘。

然后到存储->存储声明,修改etcd的几个PVC,添加storageClassName: disk,这样pvc和pv就自动绑定了。

重新部署一下etcd有状态服务,这次将不会报找不到存储卷的错误,但是容器会一直重启,查看启动日记我们会看到pod想创建/bitnami/etcd/data目录,但是报了无权限。

解决权限问题,添加一个初始化容器,修改挂盘路径的权限。

yaml 复制代码
       initContainers:
        - args:
            - '-c'
            - chmod 777 /bitnami/etcd
          command:
            - /bin/sh
          image: centos
          imagePullPolicy: IfNotPresent
          name: chmod
          resources: {}
          securityContext:
            runAsUser: 0
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /bitnami/etcd
              name: data

然后还要修改主容器的securityContext。

yaml 复制代码
      securityContext:
        fsGroup: 0
        runAsGroup: 0
        runAsUser: 0

怎么访问apisix网关

由于我买的是ACK的Serverless集群(ASK),没有固定的Node,所以需要将apisix-gateway这个Service资源的type改为LoadBalancer,这样阿里云就会为我们创建一个CLB,然后得到一个公网IP。

怎么访问apisix-dashboard

访问dashboard前,需要给apisix-dashboard也分配clb,即将apisix-dashboard的Service的类型改为LoadBalancer。

账号密码在名为"apisix-dashboard"的ConfigMap资源里面描述,修改账号密码的话也是修改这个ConfigMap资源即可,修改成功后需要重启dashboard容器。(ACK集群控制台->配置管理->配置项->apisix-dashboard)

相关推荐
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue酒店预订系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
JavaGuide6 小时前
IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!
java·后端·mysql·springboot·idea·大厂面试·javaguide
小北方城市网7 小时前
MySQL 索引优化实战:从慢查询到高性能
数据库·spring boot·后端·mysql·rabbitmq·mybatis·java-rabbitmq
汤姆yu7 小时前
基于springboot的植物花卉销售管理系统
java·spring boot·后端
海南java第二人7 小时前
Spring Boot Starters深度解析:简化依赖管理的核心利器
java·spring boot·后端
韩立学长7 小时前
Springboot喵趣网上宠物店的设计和实现5pidz60b(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
J_liaty8 小时前
Redis公共方法详解
spring boot·redis·后端
小北方城市网8 小时前
生产级 Spring Boot + MyBatis 核心配置模板
java·spring boot·redis·后端·spring·性能优化·mybatis
a努力。9 小时前
蚂蚁Java面试被问:流批一体架构的实现和状态管理
java·后端·websocket·spring·面试·职场和发展·架构
计算机学姐9 小时前
基于SpringBoot的在线骑行网站系统
java·vue.js·spring boot·后端·mysql·spring·tomcat