K8S中部署apisix(非ingress)

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

不使用pvc的方式在K8S中部署apisix-gateway

简介

因为公司项目准备重构,现在做技术储备,之前公司项目使用的ocelot做网关,ocelot是.net平台下的一个网关,也是很不错,但是在选型的时候需要考虑到性能问题,所以在这次重构中抛弃了ocelot,看了apisix和kong,kong也是一个很不错的网关,不过因为对kong不太了解,刚好有朋友在用apisix所以就选了apisix来做新的网关,避免了重复掉到坑里面。不单单是部署,后面还要使用apisix进行身份认证等一系列的插件都会使用,所以慢慢更新吧。

  • 我的apisix使用etcd作为数据存储服务器,官方的使用pvc方式或者docker-compose的方式,对于新手不太友好,本篇是从etcd的安装到apisix的打通都会涉及。

  • apisix是服务端,用来进行网络请求转发。

  • apisix-dashboard是他的控制面板,用来进行可视化配置。

    • apisix介绍

    apisix是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化。APISIX 通过插件机制,提供了动态负载平衡、身份验证、限流限速等等功能,当然我们也可以自己开发插件进行拓展。

      - 动态负载均衡:跨多个上游服务的动态负载均衡,目前已支持 round-robin 轮询和一致性哈希算法。- 身份验证:支持 key-auth、JWT、basic-auth、wolf-rbac 等多种认证方式。- 限流限速:可以基于速率、请求数、并发等维度限制。
    

1、部署etcd

etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用,持久性数据存储和检索而准备。

  • ubuntu部署etcd

    • ubuntu中部署etcd的两种方式:

    一种是去GitHub下载二进制的安装包,还有一种是apt-get install etcd,第二种方式我也尝试过,可能是我软件源的问题,版本有点老,所以我就换成了使用第一种方式,而且也比较推荐使用第一种方式。

    • 我用的etcd下载的版本是3.5.2,废话不多说直接看步骤:
    • 1.1、将etcd etcdctl etcdutl 二进制文件拷贝到/usr/local/bin目录下

    /usr/local/bin
    • 1.2、创建一个etcd的etcd.conf.yml,将下面代码拷贝进去,我这里etcd就简单的配置了一下,没有做集群,所以yml很简单。

    name: etcd-1
    data-dir: /home/etcd/data
    listen-client-urls: http://0.0.0.0:2379
    advertise-client-urls: http://0.0.0.0:2379
    • 1.3、通过etcd --config-file etcd.conf.yml的路径运行,如下图就是成功了,也可以使用etcd manager客户端来测试。


    • 1.4、如果使用etcd直接启动的话没有办法后台运行,所以我们需要在/etc/systemd/system目录下创建一个etcd.service来进行后台运行。

    [Unit]
    Description=ETCD Server
    Documentation=https://github.com/coreos/etcd
    After=network-online.target
    Wants=network-online.target[Service]
    User=root
    Group=root
    ExecStart= etcd --config-file /home/etcd/etcd.conf.yml[Install]
    WantedBy=multi-user.target
    • 1.5、创建好之后可以通过以下命令来确定运行状态如下图:

    # 启动
    sudo systemctl start etcd.service
    # 查看状态
    sudo systemctl status etcd.service
    # 开机自启
    sudo systemctl enable etcd.service

    • 1.6、设置用户名和密码

    # 设置版本为V3
    export ETCDCTL_API=3
    # 添加用户
    etcdctl user add root
    # 开启认证
    etcdctl auth enable

2、K8S部署apisix

apisix-gateway在部署的时候分为两块,分别是apisix和apisix-dashboard面板,所以看起来比较绕,不过apisix在部署的时候使用的是yaml文件覆盖的方式,所以我这里是将yaml存储到configmap中了,方便进行统一管理。我使用的k8s是Ubuntu出品的microk8s,用它的主要原因是因为配置简单。

  • 2.1部署apisix

2.1.1、创建apisix.conf.yaml,并存储到configmap中,

apisix:
node_listen: 9080              # APISIX listening port
enable_ipv6: falseallow_admin:                  # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow- 0.0.0.0/0              # We need to restrict ip access rules for security. 0.0.0.0/0 is for test.admin_key:
- name: "admin"key: edd1c9f034335f136f87ad84b625c8f1role: admin                 # admin: manage all configuration data# viewer: only can view configuration data
- name: "viewer"key: 4054f7cf07e344346cd3f287985e76a2role: viewerenable_control: true
control:ip: "0.0.0.0"port: 9092etcd:
host:          # supports defining multiple etcd host addresses for an etcd cluster- "http://192.168.31.170:2379"
user: "root"    # ignore etcd username if not enable etcd auth
password: "root"  # ignore etcd password if not enable etcd authdiscovery:
nacos:host:- "http://47.100.213.49:8848"prefix: "/nacos/v1/"fetch_interval: 30    # default 30 secweight: 100           # default 100timeout:connect: 2000       # default 2000 mssend: 2000          # default 2000 msread: 5000          # default 5000 msplugin_attr:
prometheus:export_addr:ip: "0.0.0.0"port: 9091plugins:
- client-control
- ext-plugin-pre-req
- zipkin
- request-id
- fault-injection
- serverless-pre-function
- batch-requests
- cors
- ip-restriction
- ua-restriction
- referer-restriction
- uri-blocker
- request-validation
- openid-connect
- wolf-rbac
- hmac-auth
- basic-auth
- jwt-auth
- key-auth
- consumer-restriction
- authz-keycloak
- proxy-mirror
- proxy-cache
- proxy-rewrite
- api-breaker
- limit-conn
- limit-count
- limit-req
- gzip
- server-info
- traffic-split
- redirect
- response-rewrite
- grpc-transcode
- prometheus
- echo
- http-logger
- sls-logger
- tcp-logger
- kafka-logger
- syslog
- udp-logger
- serverless-post-function
- ext-plugin-post-reqstream_plugins:
- ip-restriction
- limit-conn
- mqtt-proxy

2.1.2、使用kubectl命令创建configmap

# 将config.yaml 存储到k8s的configmap中
kubectl create configmap sukt-apisix-gateway-config --from-file=config.yaml=/home/sukt-platform/apisix/apisix-gateway-config.yaml -n sukt-platform

2.1.3、新建apisix-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: sukt-apisix-gateway
namespace: sukt-platform
spec:
selector:matchLabels:app: sukt-apisix-gateway
template:metadata:labels:app: sukt-apisix-gatewayspec:containers:- name: sukt-apisix-gatewayimage: apache/apisix:2.10.3-alpineimagePullPolicy: IfNotPresentresources:limits:cpu: 500mmemory: 1Girequests:cpu: 250mmemory: 256MisecurityContext:privileged: falseterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /usr/local/apisix/conf/config.yamlname: configsubPath: config.yamlports:- containerPort: 9080- containerPort: 9443dnsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 420name: sukt-apisix-gateway-configname: config

2.1.4、新建apisix-service.yaml

apiVersion: v1
kind: Service
metadata:
name: sukt-apisix-gateway-nodetype
labels:app: sukt-apisix-gateway-nodetype
namespace: sukt-platform
spec:
type: NodePort
selector:app: sukt-apisix-gateway
ports:
- port: 9080name: transfer1targetPort: 9080nodePort: 30107
- port: 9443name: transfer2targetPort: 9443nodePort: 30108
  • 2、部署apisix-dashboard

2.2.1、创建apisix-dashboard-config.yaml,并存储到configmap中,

#
# 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.
#conf:
listen:host: 0.0.0.0     # `manager api` listening ip or host nameport: 9000          # `manager api` listening port
allow_list:           # If we don't set any IP list, then any IP access is allowed by default.- 0.0.0.0/0
etcd:endpoints:          # supports defining multiple etcd host addresses for an etcd cluster- "http://192.168.31.170:2379"# yamllint disable rule:comments-indentation# etcd basic auth infousername: "root"    # ignore etcd username if not enable etcd authpassword: "root"  # ignore etcd password if not enable etcd authmtls:key_file: ""          # Path of your self-signed client side keycert_file: ""         # Path of your self-signed client side certca_file: ""           # Path of your self-signed ca cert, the CA is used to sign callers' certificates# prefix: /apisix     # apisix config's prefix in etcd, /apisix by default
log:error_log:level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatalfile_path:logs/error.log  # supports relative path, absolute path, standard output# such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderraccess_log:file_path:logs/access.log  # supports relative path, absolute path, standard output# such as: logs/access.log, /tmp/logs/access.log, /dev/stdout, /dev/stderr# log example: 2020-12-09T16:38:09.039+0800	INFO	filter/logging.go:46	/apisix/admin/routes/r1	{"status": 401, "host": "127.0.0.1:9000", "query": "asdfsafd=adf&a=a", "requestId": "3d50ecb8-758c-46d1-af5b-cd9d1c820156", "latency": 0, "remoteIP": "127.0.0.1", "method": "PUT", "errs": []}
authentication:
secret:secret              # secret for jwt token generation.# NOTE: Highly recommended to modify this value to protect `manager api`.# if it's default value, when `manager api` start, it will generate a random string to replace it.
expire_time: 3600     # jwt token expire time, in second
users:                # yamllint enable rule:comments-indentation- username: admin   # username and password for login `manager api`password: P@ssW0rd- username: userpassword: P@ssW0rdplugins:                          # plugin list (sorted in alphabetical order)
- api-breaker
- authz-keycloak
- basic-auth
- batch-requests
- consumer-restriction
- cors
# - dubbo-proxy
- echo
# - error-log-logger
# - example-plugin
- fault-injection
- grpc-transcode
- hmac-auth
- http-logger
- ip-restriction
- jwt-auth
- kafka-logger
- key-auth
- limit-conn
- limit-count
- limit-req
# - log-rotate
# - node-status
- openid-connect
- prometheus
- proxy-cache
- proxy-mirror
- proxy-rewrite
- redirect
- referer-restriction
- request-id
- request-validation
- response-rewrite
- serverless-post-function
- serverless-pre-function
# - skywalking
- sls-logger
- syslog
- tcp-logger
- udp-logger
- uri-blocker
- wolf-rbac
- zipkin
- server-info
- traffic-split

2.2.2、使用kubectl命令创建configmap

# 将config.yaml 存储到k8s的configmap中
kubectl create configmap sukt-apisix-dashboard-config --from-file=config.yaml=/home/sukt-platform/apisix/apisix-dashboard-config.yaml -n sukt-platform

2.2.3、新建apisix-dashboard-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: sukt-apisix-dashboard
namespace: sukt-platform
spec:
selector:matchLabels:app: sukt-apisix-dashboard
template:metadata:labels:app: sukt-apisix-dashboardspec:nodeName: microk8sslave1 # 部署到指定的node节点containers:- name: sukt-apisix-dashboardimage: apache/apisix-dashboard:2.10.1-alpineimagePullPolicy: IfNotPresentresources:limits:cpu: 500mmemory: 1Girequests:cpu: 250mmemory: 256MisecurityContext:privileged: falseterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /usr/local/apisix-dashboard/conf/conf.yamlname: configsubPath: config.yaml #这个位置对应的是comfigmap中的名字,不是 /usr/local/apisix-dashboard/conf/conf.yamlports:- containerPort: 9000dnsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 420name: sukt-apisix-dashboard-configname: config

2.2.4、新建apisix-dashboard-service.yaml

apiVersion: v1
kind: Service
metadata:
name: sukt-apisix-dashboard-nodetype
labels:app: sukt-apisix-dashboard-nodetype
namespace: sukt-platform
spec:
type: NodePort
selector:app: sukt-apisix-dashboard
ports:
- port: 9000name: transfer1targetPort: 9000nodePort: 30109
  • 运行效果图

可以通过dashboard面板的系统信息查看apisix-gateway的运行信息

结语

apisix-gateway文章分为一个专题,本篇只是讲解了如何在k8s中安装以及启动,后面会讲解如何进行转发以及其他功能等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习理论知识部分--偏差方差平衡(bias-variance tradeoff)

摘要: 1.常见问题 1.1 什么是偏差与方差? 1.2 为什么会产生过拟合,有哪些方法可以预防或克服过拟合? 2.模型选择例子 3.特征选择例子 4.特征工程与数据预处理例子 内容: 1.常见问题 1.1 什么是偏差与方差? …

有手就行3——持续集成环境—maven、tomcat、安装和配置

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 有手就行3——持续集成环境—maven、tomcat、安装 持续集成环境**(5)-Maven****安装和配置** 持续集成环境(6)-Tomcat安装…

.netcore基础知识(一)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 先来说说web服务器 先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器n…

BZOJ 1791 岛屿(环套树+单调队列DP)

题目实际上是求环套树森林中每个环套树的直径。 对于环套树的直径,可以先找到这个环套树上面的环。然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值。 那么直径一定就是从环上的某个点开始,某个点结束的。 把环拆成链,定义dp[…

什么是SAS

什么是SAS?简单的说,SAS是一种磁盘连接技术。它综合了现有并行SCSI和串行连接技术(光纤通道、SSA、IEEE1394及InfiniBand等)的优势,以串行通讯为协议基础架构,采用SCSI-3扩展指令集并兼容SATA设备&#xff…

hdu区域赛在线热身赛 暨 第十二场组队赛

题目编号:hdu 4257~4266 (对应比赛题号1001~1010) 这是我们第十二场组队赛,在今天中午进行。 比赛刚开始,依然是由我的队友读题。还没看几题,就发现了好多题judge时长高达20秒,这真的有点给我们心理造成压力。不过&…

powerdesign相关

1.安装程序和汉化放百度云了 2.打印错误处理 http://jingyan.baidu.com/article/c45ad29cd84e4b051753e2c3.html 3.导出sql http://jingyan.baidu.com/article/7082dc1c48960ee40a89bd38.html 4.name和comment同步 http://blog.csdn.net/steveguoshao/article/details/16940347…

Spring系列15:Environment抽象

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本文内容 Environment抽象的2个重要概念Profile 的使用PropertySource 的使用 Environment抽象的2个重要概念 Environme…

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能…

PS图像菜单下计算命令

PS图像菜单下计算命令通过通道的混合模式得到的选区非常精细,从而调色的时候过度非常好。功能十分强大。 下面用计算命令中的"相加"和"减去"模式做实例解析,这里通道混合模式和图层混合模式原理是一样的。 原图: 实例目…

win10 VScode配置GCC(MinGW)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 前提 安装 Visual Studio Code安装 C/C 扩展 for VS Code 也可以在vscode的extension界面搜索’c’查找插件安装 3. 获取最…

复制构造函数的用法及出现迷途指针问题

复制构造函数利用下面这行语句来复制一个对象: A (A &a) 从上面这句话可以看出,所有的复制构造函数均只有一个参数,及对同一个类的对象的引用 比如说我们有一个类A,定义如下: ?12345678910class A{public:A(int i…

Linux下压缩某个文件夹(文件夹打包)

为什么80%的码农都做不了架构师?>>> tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 zip 压缩方法: 压缩当前的文件夹 zi…

GoJS 使用笔记

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 作为商业软件,GoJs很容易使用,文档也很完备,不过项目中没有时间系统地按照文档学习&…

Android学习笔记:TabHost 和 FragmentTabHost

2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget.TabHost初始化函数(必须在addTab之前调用):setup(); 包含两个子元素:…

PostgreSQL VACUUM 之深入浅出 (二)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 AUTOVACUUM AUTOVACUUM 简介 PostgreSQL 提供了 AUTOVACUUM 的机制。 autovacuum 不仅会自动进行 VACUUM,也…

分布式概念与协议

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 分布式协议 分布式理论概念 1. 分布式数据一致性 分布式数据一致性,指的是数据在多个副本中存储时&#xff…

java Web监听器导图详解

监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,H…

Linux C/C++ UDP Socket 网络通信

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 昨晚 Vv 让我给她讲讲网络编程,于是我就傻乎乎的带她入了门… 以下内容为讲课时制作的笔记~ 1. sock…

strtok和strtok_r

strtok和strtok_r原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 …