從去年上半年微服務項目上線以來,一直使用kong
做爲微服務API網關,整個項目徹底部署於k8s
,一路走來,對於k8s
,對於kong
,經歷了一個從無到有,從0到1的過程,也遇到過了一些坎坷,今天準備分享一些實際的當心得和經驗,本篇將盡可能作到短小精幹,但願能讓你們一目瞭然。nginx
在開始部署kong
到k8s
環境中時,做者就思考過一些運維問題,以下:shell
kong
做爲一個傑出的高性能微服務API網關,可使用lua
腳本編寫強大的插件來擴展它的功能,在這種狀況下,插件可能會隨着版本而變更,如何優雅地升級它呢?kong
支持https
,須要給它配置SSL 證書,那麼當證書到期後,如何優雅地升級它呢?備註:固然還有不少其餘的問題,不過與今天的主題不符,後面再繼續分享。後端
若是部署的時候都能預先考慮好這些問題,那麼當問題來臨的時候,就能夠駕輕就熟地處理好它。api
將插件和證書直接打包進鏡像裏app
當須要升級時,製做新鏡像,而後使用新鏡像替換掉舊鏡像便可。運維
將插件和證書放置到k8s的配置字典中微服務
當須要升級時,只需更新ConfigMap
的配置信息,而後重啓kong
便可。性能
從上面能夠看到,方案一經過升級整個網關的方式達到升級插件或證書的目的,不知足最小化升級風險的要求,粒度偏大,生產環境通常不會採用這種方式;而方案二將插件和證書做爲配置信息,真正作到最小化升級,因此採用方案二進行實踐。lua
備註:方案一你們能夠下去本身實踐。插件
實踐此方案前,請確保已經將kong完整地部署到k8s中,這不是本篇的重點。
將插件拷貝了k8s的master機器的/root/api-supported-versions
目錄下:
備註:這個插件返回後端目前支持的版本列表。
將證書拷貝了k8s的master機器的/root/certs
目錄下:
建立證書
因爲證書屬於機密信息,故建立爲secret
,命令以下:
kubectl -n [命名空間] delete secret kong-certs; kubectl -n [命名空間] create secret generic kong-certs --from-file=/root/certs;
瀏覽結果:
建立插件
插件信息建立爲ConfigMap
,命令以下:
kubectl -n [命名空間] delete configmap kong-api-supported-versions; kubectl -n [命名空間] create configmap kong-api-supported-versions \ --from-file=/root/api-supported-versions
瀏覽結果:
apiVersion: apps/v1 kind: Deployment spec: template: metadata: labels: app: kong release: gateway spec: containers: - env: # 證書名稱與文件夾名稱保持一直便可。 - name: KONG_SSL_CERT value: /certs/[證書名稱].crt - name: KONG_SSL_CERT_KEY value: /certs/[密鑰名稱].key - name: KONG_PLUGINS # 這裏很重要:不要忘記添加插件名稱。 value: bundled,api-supported-versions image: kong:0.14.0 imagePullPolicy: IfNotPresent name: kong ports: - containerPort: 80 name: proxy protocol: TCP - containerPort: 443 name: proxy-ssl protocol: TCP volumeMounts: - mountPath: /certs name: kong-certs # 插件目錄爲/usr/local/share/lua/5.1/kong/plugins,這個也是kong規定的目錄。 - mountPath: /usr/local/share/lua/5.1/kong/plugins/api-supported-versions/handler.lua name: handler-lua subPath: handler.lua - mountPath: /usr/local/share/lua/5.1/kong/plugins/api-supported-versions/schema.lua name: schema-lua subPath: schema.lua volumes: - name: kong-certs secret: defaultMode: 420 secretName: kong-certs - configMap: defaultMode: 420 items: - key: handler.lua path: handler.lua name: api-supported-versions name: handler-lua - configMap: defaultMode: 420 items: - key: schema.lua path: schema.lua name: api-supported-versions name: schema-lua
請注意,爲了簡要,而且說明主題,上面僅爲補丁部分腳本,你須要參考它,而後修改kong
的部署資源文件,最後執行kubectl -n [命名空間] apply -f [kong部署資源文件名稱.yml]
才能完成打補丁。
從新建立k8s
的配置信息,而後重啓kong
就好了,完美知足方案二所訴遠景。
本篇先討論了,如何優雅地給k8s
環境的kong
部署插件和證書的方案,而後一步步實踐整個方案,若是你以爲本篇文章對您有幫助的話,感謝您的【推薦】,也能夠【關注我】,我會按期的在博客分關於k8s
的運維實踐。
下一篇,做者會分享《k8s實踐,如何給kong自定義nginx模塊》,請繼續關注。
若是有什麼疑問和看法,歡迎評論區交流。
轉載請告知做者受權,並在明顯位置給出出處及連接。