体验 Apache APISIX

Posted engchina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了体验 Apache APISIX相关的知识,希望对你有一定的参考价值。

体验 Apache APISIX

Apache APISIX 是什么

Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。

官网地址

https://apisix.apache.org/

安装

helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns ingress-apisix
helm install apisix apisix/apisix \\
  --set gateway.type=LoadBalancer \\
  --set ingress-controller.enabled=true \\
  --namespace ingress-apisix \\
  --set ingress-controller.config.apisix.serviceNamespace=ingress-apisix
kubectl get service --namespace ingress-apisix

代理 httpbin 服务

kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80

为了让 Apache APISIX 代理请求 httpbin,我们需要创建一个 ApisixRoute 资源,

cat <<EOF | kubectl apply -f -
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: httpserver-route
spec:
  http:
  - name: rule1
    match:
      hosts:
      - local.httpbin.org
      paths:
      - /*
    backends:
       - serviceName: httpbin
         servicePort: 80
EOF

获取 default_cluster_admin_key,

kubectl -n ingress-apisix get cm apisix-configmap -oyaml | grep default_cluster_admin_key | awk 'print $2'

在其中一个 Apache APISIX Pod 中运行 curl 调用,以检查资源是否已交付给它。

kubectl exec -it -n $namespace of Apache APISIX $Pod name of Apache APISIX -- curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-Key: $default_cluster_admin_key'

示例,

kubectl exec -it -n ingress-apisix apisix-857664cdd9-qqbmd -- curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-Key: edd1c9f034335f136f87ad84b625c8f1'

并请求 Apache APISIX 验证路由。

kubectl exec -it -n $namespace of Apache APISIX $Pod name of Apache APISIX -- curl http://127.0.0.1:9080/headers -H 'Host: local.httpbin.org'

示例,

kubectl exec -it -n ingress-apisix apisix-857664cdd9-qqbmd -- curl http://127.0.0.1:9080/headers -H 'Host: local.httpbin.org'

获取 apisix-gateway 的 LoadBalancer IP,

kubectl -n ingress-apisix get svc apisix-gateway | grep apisix-gateway | awk 'print $4'

测试通过 local.httpbin.org 能访问。

curl -X GET "http://192.168.31.53/get?foo1=bar1&foo2=bar2" -H "Host: local.httpbin.org"

输出结果,


  "args": 
    "foo1": "bar1",
    "foo2": "bar2"
  ,
  "headers": 
    "Accept": "*/*",
    "Host": "local.httpbin.org",
    "User-Agent": "curl/7.76.1",
    "X-Forwarded-Host": "local.httpbin.org"
  ,
  "origin": "10.244.0.0",
  "url": "http://local.httpbin.org/get?foo1=bar1&foo2=bar2"

安装 apisix-dashboard

helm install apisix-dashboard --set service.type=LoadBalancer apisix/apisix-dashboard --namespace ingress-apisix

获取 apisix-dashboard 的 LoadBalancer IP,

kubectl -n ingress-apisix get svc apisix-dashboard | grep apisix-dashboard | awk 'print $4'

打开浏览器访问 apisix-dashboard 的 LoadBalancer IP,默认用户名和密码是 admin/admin

配置 https 访问

生成自签名证书,域名是*.httpbin.org

openssl genrsa -des3 -passout pass:123456 -out ca.key 2048
openssl rsa -in ca.key -passin pass:123456 -out ca.key
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=httpbin.org"
openssl genrsa -out tls.key 2048
openssl req -new -key tls.key -out tls.csr -subj "/CN=*.httpbin.org"
cat > server.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.httpbin.org
EOF

openssl x509 -req -in tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650 -extfile server.ext

(不需要的步骤)使用自签名证书创建 secret,

kubectl create secret tls server-secret --cert=tls.crt --key=tls.key -n ingress-apisix

访问 apisix-dashboard,创建 SSL,

修改 apisix 的 ConfigMap,

kubectl -n ingress-apisix edit cm apisix
--- from
      ssl:
        enable: false
--- to
      ssl:
        enable: true
---

重新发布 apisix 的 Pod,

kubectl -n ingress-apisix rollout restart deployment apisix

修改 apisix-gateway 的 Service,添加 https 端口,

kubectl -n ingress-apisix edit svc apisix-gateway
--- add
  - name: apisix-gateway-tls
    port: 443
    protocol: TCP
    targetPort: 9443
---

修改 /etc/hosts,添加本地 dns 映射,

sudo vi /etc/hosts
--- add
192.168.31.53 local.httpbin.org
---

测试,

curl --cacert ca.crt -X GET "https://local.httpbin.org/get?foo1=bar1&foo2=bar2"

curl -X GET "http://local.httpbin.org/get?foo1=bar1&foo2=bar2"

完结!

进入 Apache 孵化器 7 个月,APISIX 发布第 6 个 Apache Release!

Apache APISIX 是云原生 API 网关,不仅可以帮你处理传统的南北向流量,也可以处理服务间的东西向流量。它是基于 Nginx 和 etcd 来实现,和 Nginx  以及传统 API 网关相比,Apache APISIX 具备动态路由、动态上游和插件热加载的特性。




本次发布的 1.3 版本主要是安全更新,拒绝无效的 header 并对 uri 进行安全编码。


这是 APISIX 去年 10 月份进入 Apache 孵化器后,由第 6 位发布经理发布的第 6 个 Apache Release。


Apache APISIX 的社区正在飞速发展,从加入 Apache 孵化器之初的 20 多位贡献者,增加到现在的 70 多位贡献者,其中包含 20 位 PPMC 和 22 位 committer。


加入 Apache APISIX


如果你希望使用修改任意配置都无需重启的 web 服务器,如果你希望使用代码简洁、云原生友好的微服务网关,那么 Apache APISIX 就是你不二的选择。


你可以加入 Apache APISIX 超过千人的 QQ 交流群:552030619,也可以在 GitHub 上提交 issue 和 PR:https://github.com/apache/incubator-apisix。让我们一起努力,打造世界级的开源项目!

以上是关于体验 Apache APISIX的主要内容,如果未能解决你的问题,请参考以下文章

将 Apache Drill 连接到 Kudu

体验 Apache APISIX

Apache atlas 初体验

ActiveMQ出体验

04-体验一下apache组织封装的BeanUtil工具包

安德鲁1.2Ku全下125C波(CCTV4K除外)