日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

API网关Kong(二):Kong与Kubernetes集成的方法

發(fā)布時(shí)間:2024/8/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 API网关Kong(二):Kong与Kubernetes集成的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:?李佶澳???轉(zhuǎn)載請保留:原文地址???發(fā)布時(shí)間:2018-09-30 16:07:13 +0800

?

  • 說明
  • 先說組成
    • 控制平面與數(shù)據(jù)平面
  • CustomResourceDefinitions
  • 開始部署
  • 使用演示
  • 參考

說明

這是API網(wǎng)關(guān)Kong的系列教程中的一篇,使用過程中遇到的問題和解決方法記錄在API網(wǎng)關(guān)Kong的使用過程中遇到的問題以及解決方法。

經(jīng)過前面的學(xué)習(xí)(Nginx、OpenResty和Kong的基本概念與使用方法),對Api網(wǎng)關(guān)是什么,以及Kong能夠做什么已經(jīng)有了足夠的了解。 現(xiàn)在Kubernetes一統(tǒng)計(jì)算資源與應(yīng)用發(fā)布編排的趨勢已經(jīng)形成,我們更關(guān)心Kong能否和Kubernetes結(jié)合。

Kong是一個(gè)Api網(wǎng)關(guān),也是一個(gè)特性更豐富的反向代理。既然它有代理流量的功能,那么能不能直接成為Kubernetes的流量入口?使Kubernetes上托管的服務(wù)都通過Kong發(fā)布。

Kong實(shí)現(xiàn)了一個(gè)Kubernetes Ingress Controller(后面用kong-ingress-controller指代這個(gè)項(xiàng)目)來做這件事。另外把整個(gè)Kong部署在Kubernetes中也是可行的,見Kong CE or EE on Kubernetes。

先說組成

Kubernetes Ingress Controller for Kong中介紹了在kubernetes中的部署方法,總共有三部分。

第一部分是數(shù)據(jù)庫。kong不支持mysql,使用的數(shù)據(jù)庫只能是9.4及以上版本的postgres,或者Cassandra 3.x.x。

第二部分是ingress-controller.yaml,是一個(gè)Deployment,Pod中有三個(gè)容器:

第一個(gè)容器是InitContainer,負(fù)責(zé)初始化數(shù)據(jù)庫;第二個(gè)容器是kong-proxy,只開放了admin接口,負(fù)責(zé)提供Kong的管理API;第三個(gè)容器是kong-ingress-controller,負(fù)責(zé)Kubernetes資源與Kong的銜接,監(jiān)測Kubernetes資源的變動,及時(shí)調(diào)用Kong的管理API,更新Kong的配置。

第三部分是kong.yaml,可以是Deployment,也可以是Daemonset,pod中只有一個(gè)kong-proxy容器,禁用了admin接口,只提供代理服務(wù)。

控制平面與數(shù)據(jù)平面

ingress-controller.yaml是控制平面,提供管理接口、下發(fā)規(guī)則;kong.yaml是數(shù)據(jù)平面,反向代理對API的請求。

下面是kong-ingress-controller中給出的示意圖,紅色箭頭表示控制信息的流動,綠色箭頭表示API請求的流動,dataplane就是屬于kong.yaml的多個(gè)Pod:

CustomResourceDefinitions

Kubernetes支持自定義資源Extend the Kubernetes API with CustomResourceDefinitions,kong-ingress-controller充分利用了這個(gè)簡稱為CRD的特性。

Cluster-types.yml中定義了KongPlugin、KongConsumer、KongCredential和KongIngress四種CRD資源(@2018-09-30 17:19:38)。

Kong ingress controller: custom types對這四種CRD資源做了說明:

KongConsumer: kong的用戶 KongPlugin: kong的插件的配置項(xiàng) KongCredential: kong用戶的認(rèn)證憑證 KongIngress: 對用戶創(chuàng)建的ingress的補(bǔ)充配置

KongConsumer定義了kong的用戶:

apiVersion: configuration.konghq.com/v1 kind: KongConsumer metadata:name: <object name>namespace: <object namespace> username: <user name> custom_id: <custom ID>

例如:

apiVersion: configuration.konghq.com/v1 kind: KongConsumer metadata:name: consumer-team-x username: team-X custom_id: my_team_x # optional and not recommended, please use `username`

KongCredential是用戶的認(rèn)證憑證,它的type與kong支持的認(rèn)證方式一一對應(yīng):

apiVersion: configuration.konghq.com/v1 kind: KongCredential metadata:name: credential-team-x consumerRef: consumer-team-x type: key-auth config:key: 62eb165c070a41d5c1b58d9d3d725ca1

KongPlugin是可以具體到用戶的插件配置,注意它可是全局配置,也可以是針對某個(gè)用戶的配置(consumerRef關(guān)聯(lián)到特定用戶):

apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata:name: <object name>namespace: <object namespace>labels:global: "true" # optional, please note the quotes around true consumerRef: <optional, name of an existing consumer> # optional disabled: <boolean> # optional config:key: value plugin: <name-of-plugin>

例如:

apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata:name: http-svc-consumer-ratelimiting consumerRef: consumer-team-x config:hour: 1000limit_by: ipsecond: 100 plugin: rate-limiting

KongIngress是對已經(jīng)存在的ingress的補(bǔ)充。 Kong-ingress-controller會主動監(jiān)測kuernetes集群中所有的ingress,為每個(gè)配置了host的ingress在kong中創(chuàng)建一個(gè)router,為每個(gè)被ingress使用的backend在kong中創(chuàng)建一個(gè)service。 Ingress是kubernetes定義的(Kubernetes Ingress定義),對于那些與kong相關(guān)但是Ingress不支持的配置項(xiàng),需要在KongIngress中配置。

下面是一個(gè)完成的KongIngress定義,包含upstream、proxy和route三部分:

apiVersion: configuration.konghq.com/v1 kind: KongIngress metadata:name: configuration-demo upstream:hash_on: nonehash_fallback: nonehealthchecks:active:concurrency: 10healthy:http_statuses:- 200- 302interval: 0successes: 0http_path: "/"timeout: 1unhealthy:http_failures: 0http_statuses:- 429interval: 0tcp_failures: 0timeouts: 0passive:healthy:http_statuses:- 200successes: 0unhealthy:http_failures: 0http_statuses:- 429- 503tcp_failures: 0timeouts: 0slots: 10 proxy:protocol: httppath: /connect_timeout: 10000retries: 10read_timeout: 10000write_timeout: 10000 route:methods:- POST- GETregex_priority: 0strip_path: falsepreserve_host: trueprotocols:- http- https

它們的用法在后面章節(jié)演示。

開始部署

這里主要是學(xué)習(xí),直接使用了Master分支中提供的yaml文件(commit: 34e9b4165ab64318d00028f42b797e77dac65e24),不是正式的Release版本。

創(chuàng)建custerm-types:

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/custom-types.yaml kubectl create -f custom-types.yaml

創(chuàng)建名為kong的namespace,后面yaml描述的任務(wù)部署在這個(gè)namespace中:

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/namespace.yaml kubectl create -f namespace.yaml

設(shè)置RBAC,為kong namespace中的serivceaccount綁定角色,并賦予權(quán)限:

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/rbac.yaml kubectl create -f rbac.yaml

部署postgre,這里為了方便直接在Kubernetes部署了,在操作系統(tǒng)上的部署方法參考:PostgresSQL數(shù)據(jù)庫的基本使用。

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/postgres.yaml kubectl create -f postgres.yaml

注意postgres.yaml是一個(gè)statfulset,并且要為每個(gè)Pod綁定PV,如果你的集群不支持,且純粹試用可以注釋掉(這樣postgre的pod重建時(shí),數(shù)據(jù)會丟失):

...volumes:- name: datadirpersistentVolumeClaim:claimName: datadirvolumeClaimTemplates:- metadata:name: datadirspec:accessModes:- "ReadWriteOnce"resources:requests:storage: 1Gi

部署kube-ingress-controller:

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/ingress-controller.yaml kubectl create -f ingress-controller.yaml

部署kong:

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/manifests/kong.yaml kubectl create -f kong.yaml

kong.yaml中少了一個(gè)service(commit: 34e9b4165ab64318d00028f42b797e77dac65e24),需要加上:

--- apiVersion: v1 kind: Service metadata:name: kong-proxynamespace: kong spec:type: NodePortports:- name: kong-proxyport: 80targetPort: 8000protocol: TCP- name: kong-proxy-sslport: 443targetPort: 8443protocol: TCPselector:app: kong

確保所有的Pod正常運(yùn)行:

$ kubectl -n kong get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE kong-54875c6bd7-8ttgf 1/1 Running 0 15s 192.168.78.8 10.10.173.203 kong-ingress-controller-cfc7dc7d-vnp64 2/2 Running 7 15m 192.168.78.6 10.10.173.203 postgres-0 1/1 Running 0 17m 192.168.78.5 10.10.173.203

相關(guān)Service的狀態(tài):

$ kubectl -n kong get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kong-ingress-controller NodePort 10.254.147.53 <none> 8001:31627/TCP 27m kong-proxy NodePort 10.254.237.61 <none> 80:32057/TCP,443:31552/TCP 52s postgres ClusterIP 10.254.77.113 <none> 5432/TCP 47m

然后可以部署一個(gè)第三方提供的Dashboard:PGBI/kong-dashboard:

--- apiVersion: v1 kind: Service metadata:name: kong-dashboardnamespace: kong spec:type: NodePortports:- name: kong-dashboardport: 80targetPort: 8080protocol: TCPselector:app: dashboard ---apiVersion: extensions/v1beta1 kind: Deployment metadata:name: dashboardnamespace: kong spec:template:metadata:labels:name: dashboardapp: dashboardspec:containers:- name: kong-dashboardargs:- start- --kong-url http://kong-ingress-controller:8001- --basic-auth admin=adminimage: pgbi/kong-dashboard:latestports:- name: httpcontainerPort: 8080protocol: TCP

使用演示

在另一個(gè)namespaces中創(chuàng)建一個(gè)完整應(yīng)用:webshell-all-in-one.yaml。

$ kubectl create -f https://raw.githubusercontent.com/introclass/kubernetes-yamls/master/all-in-one/webshell-all-in-one.yaml namespace "demo-webshell" created ingress "webshell-ingress" created service "webshell" created deployment "webshell" created

上面的yaml文件,在demo-webshellnamespaces中,創(chuàng)建了deployment、serivce和ingress。

創(chuàng)建成功之后,在kong的dashboard中,可以看到自動創(chuàng)建了為demo-webshell.webshell.80 的Route:

Service Methods Protocols Hosts Paths Priority demo-webshell.webshell.80 (none) http webshell.com / 0

和一個(gè)同名的service:

Name Protocol Host Port PATH demo-webshell.webshell.80 http demo-webshell.webshell.80 80 /

之后可以通過kong-proxy服務(wù)訪問webshell:

// kong-proxy的采用NodePort方式,端口是32057 kong-proxy NodePort 10.254.237.61 <none> 80:32057/TCP,443:31552/TCP 52s

訪問效果如下,10.10.173.203是kubernetes一個(gè)node的IP:

$ curl -v -H "Host: webshell.com" 10.10.173.203:32057 * About to connect() to 10.10.173.203 port 32057 (#0) * Trying 10.10.173.203... * Connected to 10.10.173.203 (10.10.173.203) port 32057 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.29.0 > Accept: */* > Host: webshell.com > < HTTP/1.1 200 OK < Content-Type: text/html; charset=utf-8 < Content-Length: 382 < Connection: keep-alive < Date: Mon, 08 Oct 2018 10:59:08 GMT < X-Kong-Upstream-Latency: 3 < X-Kong-Proxy-Latency: 9 < Via: kong/0.14.1 < <html> <head> <meta content="text/html; charset=utf-8"> <title>WebShell</title> </head> <body> <form method="post" accept-charset="utf-8"> Command: <input type="text" name="command" width="40%" value="hostname"> Params : <input type="text" name="params" width="80%" value=""> <input type="submit" value="submit"> </form> <pre> webshell-cc785f4f8-2vp6c </pre> </body> </html>

參考

  • Kong CE or EE on Kubernetes
  • Kong/kubernetes-ingress-controller
  • Nginx、OpenResty和Kong的基本概念與使用方法
  • Kubernetes Ingress Controller for Kong
  • Deployment: ingress-controller.yaml
  • Deployment: Kong
  • Extend the Kubernetes API with CustomResourceDefinitions
  • Kong ingress controller: custom types
  • Kong postgres.yaml
  • PostgresSQL數(shù)據(jù)庫的基本使用
  • Kong Custom Resource Definitions
  • Nginx、OpenResty和Kong的基本概念與使用方法: Kong的插件
  • PGBI/kong-dashboard
  • Kubernetes Ingress
  • Kong: router
  • Kong: service
  • 轉(zhuǎn)載于:https://www.cnblogs.com/lijiaocn/p/9986915.html

    總結(jié)

    以上是生活随笔為你收集整理的API网关Kong(二):Kong与Kubernetes集成的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: h在线| 精品久久999| 成人片免费视频 | 丰满女人又爽又紧又丰满 | 无码人妻丰满熟妇啪啪 | 婷婷激情小说网 | 国产欧美精品一区二区色综合朱莉 | 91久久久久久久久久久久 | 国产传媒第一页 | 少妇黄色一级片 | 亚洲天天影视 | 欧美网站免费 | 永久av免费在线观看 | 波多野结衣在线网址 | 人人插人人爽 | 99精品免费观看 | 亚洲无卡视频 | 欧美成人短视频 | 日本高清不卡码 | 久久久福利视频 | 俺来也av| 爱情岛论坛自拍 | 性色av网| julia一区二区三区在线观看 | 青青草亚洲 | 国产a毛片 | 正在播放adn156松下纱荣子 | 少妇第一次交换又紧又爽 | 黑帮大佬和我的三百六十五天 | 天天做天天操 | 亚洲一级二级片 | 国产精品人人做人人爽 | 国产高清精品在线 | 久久久精品影院 | 三级性视频 | 国产女主播在线一区二区 | 五月天色婷婷丁香 | 国产1区在线观看 | 福利视频h | 天堂国产在线 | 国产精品久久久久久久久动漫 | 久久噜噜噜精品国产亚洲综合 | 国内精品久久久久久久影视简单 | 一个人看的毛片 | 久久久久久久极品内射 | 最好看的日本字幕mv视频大全 | 日本 奴役 捆绑 受虐狂xxxx | 亚洲国产精品无码久久久 | 少妇被按摩师摸高潮了 | 亚色综合 | 99视频观看 | 亚洲妇熟xx妇色黄蜜桃 | 亚洲av最新在线网址 | 青青青手机视频在线观看 | 久久久久高清 | 国产视频麻豆 | 韩日av片 | 毛片免| 日本三级久久 | 亚洲欧洲日本国产 | 精品五月天 | 91超碰人人| 91吃瓜在线 | 亚洲激情一区二区 | 伊人网在线视频 | 真人抽搐一进一出视频 | 午夜少妇视频 | 日本久久亚洲 | 中文在线最新版天堂 | 亚洲一区二区三区欧美 | 亚洲成人av电影 | 日日操夜夜操视频 | 色又色| 日韩激情一区二区三区 | 九久久久久 | 国产小视频免费在线观看 | 国产免费无遮挡吸奶头视频 | 中文字幕av在线免费 | 亲嘴扒胸摸屁股激烈网站 | 日韩成人免费在线 | 高清成人免费视频 | 综合网视频 | 杨幂一区二区国产精品 | 欧美一区二区三区影视 | 欧美日本一本 | 大尺度舌吻呻吟声 | 免费看黄色大片 | 欧美草逼视频 | 国产a大片| 黄色在线免费观看 | 国产精品久久久久久久一区探花 | 日韩av线| 一区二区三区播放 | 亚洲国产精品成人综合久久久 | 国产三级视频网站 | 亚洲av无码一区二区三区dv | 亚洲爆爽av | 3d动漫精品h区xxxxx区 | 亚洲天堂成人在线观看 |