当前位置:   article > 正文

K8s 安装使用 apisix_k8s安装apisix

k8s安装apisix

apisix

Apache APISIX是一个动态的、实时的、高性能的 API 网关. 本文主要测试在k8s环境下使用apisix-ingress-controlle

使用Helm Chart安装

所有的pod,svc等都放到了defaultnamespace

apisix

$ helm repo add apisix https://charts.apiseven.com
$ helm repo update
$ helm install apisix apisix/apisix
  • 1
  • 2
  • 3

apisix-dashboard

$ helm install apisix-dashboard apisix/apisix-dashboard
  • 1

apisix-ingress-controller

$ helm install apisix-ingress-controller apisix/apisix-ingress-controller --namespace default
  • 1

访问apisix-dashboard和验证安装

  • dashboard
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=apisix-dashboard,app.kubernetes.io/instance=apisix-dashboard" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
2. username: admin password:admin
3. 使用 port-forward 可以访问 dashboard
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • apisix-gateway
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)
  export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT
2. apisix-gateway 对外暴露的 `apisix` 的端口即代理的端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 查看apisix-ingress-controller日志
kubectl logs <pod name> 如果没有报错即可
  • 1

实例代理`whoami

部署whoami

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
spec:
  selector:
    matchLabels:
      run: whoami
  replicas: 2
  template:
    metadata:
      labels:
        run: whoami
    spec:
      containers:
      - name: whoami
        image: containous/whoami
        ports:
        - containerPort: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

部署whoami的svc

apiVersion: v1
kind: Service
metadata:
  name: whoami
  labels:
    run: whoami
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: whoami
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

配置路由代理-使用apisix的方式apisix-route.yml

apiVersion: apisix.apache.org/v2beta1
kind: ApisixRoute
metadata:
  name: httpserver-route
spec:
  http:
  - name: rule1
    match:
      hosts:
      - local.whoami.org
      paths:
      - /whoami
    backend:
        serviceName: whoami
        servicePort: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

配置路由代理-使用ingress的方式apisix-ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpserver-ingress
spec:
  # apisix-ingress-controller is only interested in Ingress
  # resources with the matched ingressClass name, in our case,
  # it's apisix.
  ingressClassName: apisix
  rules:
  - host: local.whoami.com
    http:
      paths:
        - path: /whoami
          pathType: Prefix
          backend:
            service:
              name: whoami
              port:
                number: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

测试访问

  • whoami 修改路由的域名选项改成空

  • 修改域名

  • 代理路径

  • 访问

  • http://127.0.0.1:32186/whoami

理解各个组件

  • apisix
    最基本的apisix服务
  • apisix-gateway
    k8s 中apisixsvc 使用nodeport方式暴露apisix服务
  • apisix-admin
    k8s 中apisixapi服务. 主要用于通过api的方式将路有写入etcd
  • apisix-dashboard
    可视化界面配置路由
  • apisix-ingress-controller
    监听k8s的api 后通过apisix-admin 写入etcd ,定义在apisix-ingress-controller-configmap
apisix:
  base_url: "http://apisix-admin:9180/apisix/admin"
  admin_key: "edd1c9f034335f136f87ad84b625c8f1"
  • 1
  • 2
  • 3

apisix中的service mesh组件

  • apisix-mesh-agent
    service-mesh组件. 对接istio . 用于替换envoy. 目前此项目还是实验性的.

关于tcp/upd代理

也可以像apisix-gateway一样将端口转发到apisix进行四层代理.

遇到的坑

  • 官网的Helm Chartapisix-ingress-controllernamespaceingress-apisix. 但apisix.apisix-dashboard放在defaultapisix-ingress-controller捕获k8s的配置无法和apisix通信
helm install apisix-ingress-controller apisix/apisix-ingress-controller --namespace default 修改下即可
  • 1
  • apisix-ingress-controller 访问apisix返回 403
放行所有IP

helm install apisix apisix/apisix \
    --set admin.allow.ipList=""
  • 1
  • 2
  • 3
  • 4

后续探索

  • 使用springboot+nacos构建微服务. apisix也可以和nacos集成.
  • 服务间调用和api请求都走apisix(又成了服务端代理?), 怎么区分内部和外部流量? 可以使用不同的请求头区别. 这样就可以省去springcloud哪些组件了.
  • 可以探索下apisix-mesh-agent. 是否就抛弃了nacos 服务. 服务的上下线的实时性怎么样. 服务数量如果很多性能会怎样

参考

  • https://apisix.apache.org/docs/helm-chart/apisix/
  • https://apisix.apache.org/docs/ingress-controller/practices/proxy-the-httpbin-service
  • https://github.com/api7/apisix-mesh-agent
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/214078
推荐阅读
相关标签
  

闽ICP备14008679号