在 Kubernetes 上部署 Kong,并使用 Prometheus 监控流量

这是介绍在Kong和HashiCorp Meetup Tokyo #1上展示的演示的内容。

首先

我们举办了「Kong + HashiCorp Meetup Tokyo #1」活动。活动中将展示题为Kong的产品演示。如果一切准备就绪,您可以在大约10分钟内体验Kong的世界。

我们将使用「Kubernetes」和「Kubernetes Ingress Contoller for Kong」。

关于孔子

这款开源的API网关软件可以实现基于Web API的云计算和微服务的整合。它适用于Linux、Docker、Kubernetes、AWS、GCP、Azure等广泛环境,具有7500万次下载累计的高人气。

关于准备好的环境。

    • MAC

macOS Mojave バージョン 10.14.6
プロセッサ : 3.1 Ghz
メモリ : 16 GB

VirtualBox

minikube を動作させるために必要
バージョン 6.0.6 r130520

Docker

Desktop Community Version 2.0.0.3
Kuvernetes: v1.10.11

事先準備

如果未安装

    • VirtualBox インストール

 

    Docker インストール (Docker Destop for Mac)

有关从终端使用的命令的事项。

    helm (Kubernetes 用のパッケージマネージャー)
$ brew install kubernetes-helm
    minibule (Kubernetes ローカル環境で実行するためのツール)
$ brew cask install minikube
    kubectl (Kubernetes コマンドラインツール)
$ brew install kubectl
    • watch (コマンド)

 

    watch コマンドは、インストール状況確認に便利です。(しなくても進められます。)
$ brew install watch
    • munikube のメモリ設定について

 

    4 GB ほど割り当てたほうが安定した動作確認がしやすいです。

设定的例子

$ minikube config set memory 4096
$ minikube delete (一旦 delete する必要あります)
$ minibuke start

Kong 演示

下面是Kong演示的介绍。

初始化(重置用途)

在需要重新开始时使用。

$ minikube delete
$ minubuke start
$ helm init

安装Kong

Kubernetes使用软件包管理器helm进行部署。
使用–namespace kong指定了命名空间进行部署。

$ helm install stable/kong --name kong --namespace kong --values https://bit.ly/2RgSRio --version 0.9.0

2. 确认Kong的安装情况

在这里,使用了watch命令。
如果没有安装watch命令,请多次执行以下kubectl命令。

$ watch -n 1 kubectl get pod -n kong

执行完成后

NAME                                  READY   STATUS      RESTARTS   AGE
kong-kong-58d994d4d8-z7cwv            1/1     Running     0          3m55s
kong-kong-controller-cb4c7977-cmd8h   2/2     Running     0          3m55s
kong-kong-init-migrations-fxt6r       0/1     Completed   0          3m55s
kong-postgresql-0                     1/1     Running     0          3m55s

只要”migrations”项目以外的内容变为”Running”,安装就成功了!

姓名表示自上而下,

    • プロキシリクエスト処理用、DataPlane

KongAPI を処理する、ControlPlane

データストアにテーブルを作成する、マイグレーション

データストア(postgresql)

设定了四个 POD。

3. 揭露孔公開

我要设置端口转发。

$ kubectl --namespace kong port-forward $(kubectl get pods --namespace kong -l "app=kong" -o jsonpath="{.items[0].metadata.name}") 8000 &

由于端口8000现在可以从外部访问,我们将进行确认。

4. 检查确保

使用cURL命令。

$ curl 127.0.0.1:8000
Handling connection for 8000
{“message”:“no Route matched with those values”}

如果能够得到这样的回应,那就成功了!

5. 安装服务

在这次演示中,我们将安装要使用的服务。
由于要向Kubernetes添加资源,所以需要应用YAML文件。

$ kubectl apply -f https://gist.githubusercontent.com/hbagdi/2d8ef66fe22cb99e1514f410f992268d/raw/a03d789b70c46ccd0b99d9f1ed838dc21419fc33/multiple-services.yaml

执行结果,

deployment.extensions/http-svc created
service/billing created
service/invoice created
service/comments created

6. 安装用于服务的入口控制(Ingress)

安装Ingress(用于负载均衡的API对象),以便可以从kubernetes集群外部访问服务。

$ echo "apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
name: strip-path
route:
strip_path: true
" | kubectl apply -f -

$ echo "apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
    configuration.konghq.com: strip-path
name: sample-ingresses
spec:
rules:
- http:
    paths:
    - path: /billing
    backend:
        serviceName: billing
        servicePort: 80
    - path: /comments
    backend:
        serviceName: comments
        servicePort: 80
    - path: /invoice
    backend:
        serviceName: invoice
        servicePort: 80" | kubectl apply -f -

7. 服务确认

我会确认能否调用服务。

$ curl -i http://localhost:8000/billing/status/200

完成之后,

Handling connection for 8000
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Kong-Upstream-Latency: 2
X-Kong-Proxy-Latency: 13
Via: kong/1.0.0

如果返回200 OK并获得响应,那么表示成功。

在此演示介绍中,我们希望进行流量监控,因此将使用循环处理来提供FakeTraffic。
由于某些计算机可能会出现高负载情况,因此可以调整sleep 0.01的值。

$ while true;
do
  curl http://localhost:8000/billing/status/200
  curl http://localhost:8000/billing/status/501
  curl http://localhost:8000/billing/status/501
  curl http://localhost:8000/invoice/status/201
  curl http://localhost:8000/invoice/status/404
  curl http://localhost:8000/comments/status/200
  sleep 0.01
done

8. 交通监控

Prometheus 是一款资源监控软件,可以可视化基础设施状态。

安装Prometheus。

$ helm install --name prometheus stable/prometheus --namespace monitoring --values https://bit.ly/2RgzDtg --version 8.4.1

我们将安装Grafana来将Prometheus获取的信息绘制成图表。
在这里,我们指定了–namespace monitoring的命名空间来部署。

 $ helm install stable/grafana --name grafana --namespace monitoring --values http://bit.ly/2FuFVfV --version 1.22.1

9. 确认 Prometheus 和 Grafana 的安装情况

查看通过命名空间监视指定的pod的状态。

$ watch -n 1 kubectl get pod -n monitoring

执行结果。

Every 1.0s: kubectl get pod -n monitoring

NAME                                             READY   STATUS    RESTARTS   AGE
grafana-95898fd7-htk7n                           1/1     Running   0          11m
prometheus-alertmanager-845d9678b9-7h8k7         2/2     Running   0          14m
prometheus-kube-state-metrics-857f8ffb9d-jpxdz   1/1     Running   0          14m
prometheus-node-exporter-pltc7                   1/1     Running   0          14m
prometheus-pushgateway-75f7fdb48b-cth7q          1/1     Running   0          14m
prometheus-server-6d6c5d6dd8-nwj52               2/2     Running   0          14m

如果所有的状态都变为”运行”,那么安装就完成了。

10. Prometheus 与 Grafana 的暴露

让外部可以访问,进行暴露。

普罗米修斯

$ kubectl --namespace monitoring port-forward $(kubectl get pods --namespace monitoring -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}") 9090 &

Grafana 可视化面板

$ kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

Prometheus通过9000端口进行了暴露,而Grafana则通过3000端口进行了暴露。

11. 验证 Grafana

打开浏览器,访问3000端口。

// ブラウザ
127.0.0.1:3000

我认为您可以访问Grafana并确认登录界面。
我将生成一个登录密码。

12. 密码生成

生成密码。密码将在终端上显示。

$ kubectl get secret --namespace monitoring grafana -o jsonpath=“{.data.admin-password}” | base64 --decode ; echo

13. Grahaa 仪表板

使用“admin”作为用户名和生成的密码重新登录Grafana。
点击左上角的“Home”菜单,选择“Kong”。
界面将切换到显示图表的页面,但目前还未开始监测。

14. 添加Kong插件

通过添加Kong提供的插件,使Prometeus生效。
Kong提供了各种各样的插件,可以方便地进行功能扩展。

$ echo "apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
labels:
    global: \"true\"
name: prometheus
plugin: prometheus
" | kubectl apply -f -

15. 监控确认

我会再次回到浏览器,检查Grahaa界面。
通过添加Kong插件,Prometheus可用于监控并开始监控。
监控(图表)将需要一些时间才能开始。

监控内容

3_RequestRateandBandwidth.png

另外,还可以监控“错误率”。

总结

当使用「Kubernetes Ingress Controller for Kong」的时候,管理员可以在Kubernetes上进行代理设置而无需调用Kong Admin API。换句话说,可以实现Kong API服务管理和Kubernetes容器管理的整合。

本次介绍了在Kubernetes上部署Kong,添加Prometheus插件,并使用Prometheus和Grafana监控流量的演示。
虽然只介绍了一个插件,但Kong可以安装在各种平台上,并提供了多种插件,使功能扩展变得容易。

※ 注意:这次的设置只是为了演示用途,实际使用时需要进行考虑。

广告
将在 10 秒后关闭
bannerAds