本文開放原始碼。之前的文章說了如何在k8s構建apollo及用Ingress配置了portal頁面,需要了解的朋友可以開啟文章中心或者跳到下面觀看:
https://www.toutiao.com/i6915360860336783876/
本文將演示如何整合配置中心apollo config的ingress及建立一個springboot專案呼叫k8s裡面的apollo,獲取配置中心的值,切換環境,並在apollo的portal頁面進行增加、修改、回滾等操作。
apollo操作頁面
一、建立客戶端要連線的config服務的Ingress檔案因我們的apollo叢集是部署在k8s裡面的,所以我們訪問裡面的服務需要用Ingress來對映。ingress是一個API物件,ingress透過http或https暴露叢集內部service,依靠ingress-controller給service提供外部URL、負載均衡、SSL/TLS能力以及基於host的反向代理。
建立了3個環境,3個環境對應的ingress檔案為:
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-dev namespace: zizaispec: rules: - host: zizai-apollo-client-dev.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-dev servicePort: 8080---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-test namespace: zizaispec: rules: - host: zizai-apollo-client-test.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-test-alpha servicePort: 8080---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-prod namespace: zizaispec: rules: - host: zizai-apollo-client-prod.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-prod servicePort: 8080
依次建立就可以。建立成功如下:
config建立ingress成功頁面
//zizai-apollo-client-dev.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-dev.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-dev.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-dev.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-dev.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://kubernetes; # 指向叢集的 }}//zizai-apollo-client-test.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-test.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-test.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-test.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-test.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://kubernetes; # 指向叢集的 }}//zizai-apollo-client-prod.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-prod.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-prod.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-prod.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-prod.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://kubernetes; # 指向叢集的 }}
這樣就可以在外面訪問了。可以透過域名直接訪問了看註冊中心Eureka,例如:我的開發環境為如下圖所示:
開啟
zizai-apollo-client-dev.test.thinkinpower.net
三、建立springboot專案
下面建立一個springboot專案進行訪問apollo的鍵值。
1、用idea建立一個springboot專案
(1)新建專案
(2)如下圖選擇專案
再下一步,選擇jdk8
再下一步,就可以完成專案的建立
(3)引入maven包
可以進入https://mvnrepository.com/,進行搜尋。本文軟體包的連結為:
https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client/1.7.0
本文用的是最新的版本。
如下放入maven的檔案即可以。
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency>
具體的pom.xml為:
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class DemoController { @Value("${timeout:100}") private int timeout; @RequestMapping("/getValue") public String getValue(){ return "get value is: " + timeout; }}
(5)修改application.properties檔案
spring.application.name=demoserver.port=8989#AppId是應用的身份資訊,是配置中心獲取配置的一個重要資訊。app.id=zizai-community-apiapollo.meta=zizai-apollo-client-dev.test.thinkinpower.net#apollo.meta=zizai-apollo-client-test.test.thinkinpower.net#apollo.meta=zizai-apollo-client-prod.test.thinkinpower.net#在應用啟動階段,向Spring容器注入被託管的application.properties檔案的配置資訊。apollo.bootstrap.enabled=true#將Apollo配置載入提到初始化日誌系統之前。apollo.bootstrap.eagerLoad.enabled=true#調整 controller 包的 log 級別,為了後面演示在配置中心動態配置日誌級別。logging.level.com.gf.controller=debug# 指定apollo配置緩衝路徑,預設為 linux: /opt/data/{appId}/config-cache Windows: C:\opt\data\{appId}\config-cache# apollo.cacheDir=/opt/data/some-cache-dir#設定叢集#apollo.cluster=SomeCluster#設定apollo裡的namespace,#apollo.bootstrap.namespaces: application
具體的選項看裡面的註釋。
注意:app.id=zizai-community-api裡的值和portal裡面的應用id必須一致。apollo.meta=zizai-apollo-client-dev.test.thinkinpower.net的值為config裡的訪問連結。
如:
和下面的是一致的
(6)環境配置
因為本文的apollo是部署在k8s的,在用Idea測試的時候必須要配置下面2個變數,不然會失敗,獲取不到值。
env: 應用使用 Apollo 哪個環境,設定為 DEV 為開發環境,設定為 PROD 是生產環境。apollo.configService: 配置中心的地址,在本地Idea跑程式碼時,指定 meta 地址無效。因為 Apollo 是部署在 k8s 中,需要在啟動時,將configService 和 meta 的值保持一致。
所以在Idea啟動的時候,如果是開發環境要加上:
-Dapollo.configService=http://zizai-apollo-client-dev.test.thinkinpower.net -Denv=DEV
如果是 java 命令啟動
$ java -Dapollo.configService=http://zizai-apollo-client-dev.test.thinkinpower.net -Denv=DEV -jar apollo-demo.jar
Idea的配置如圖:
這樣就可以拿到值了。
四、測試及演示1、登入apollo的portal設定值
timeout設定為400。
2、啟動springboot專案,訪問值
(1)啟動專案後,會看到拉配置中心的值
訪問下面url獲取值
http://localhost:8989/getValue
返回:400,和portal裡配置的一致
(2)修改timeout的值為4000
可以看到專案日誌,會獲取到值
調介面,獲取值為4000,和portal裡配置的一致
切換環境的操作也是一樣,不再詳細說明。
五、原始碼
連結:https://pan.baidu.com/s/1zSDpslkwdLWwNXi4iRGHOg
提取碼:ouuy