線上k8s環境swagger2調用接口失敗

最近後端項目集成了swagger2,瀏覽器正常打開了swagger-ui.html,但是調用接口時卻報404錯誤,仔細一看是接口調用地址和瀏覽器訪問地址並不相同。

分析了下接口調用地址的host,它竟然是k8s環境中的後端應用的service。

由於當前項目通過k8s部署,前端和後端app均以容器的形式運行在pod之中,pod之間通過service指定的host和端口號來進行訪問,所以瀏覽器打開swagger-ui.html後,swagger2實際調用的接口地址的host也變成了service,所以會出現404。

解決這個問題的方案很簡單,即爲swagger2指定host:

初始化Docket對象時通過host方法指定swagger2的host:

@Value("${swagger.host}")
private String swaggerHost;

new Docket(DocumentationType.SWAGGER_2).host(swaggerHost)
        .groupName("demo")
        .apiInfo(getApiInfo())
        .select()...

將接口地址配置在application.properties中:

swagger.host=xxx.biz/api

這種方案雖然可行,但是不推薦。

由於當前後端應用部署在k8s環境中,鏡像掛載到不同namespace中,不同的namespace就是不同的開發環境,而所有鏡像都使用了同一個配置文件,所以這就意味着不同開發環境的swagger2調用了同一個地址,顯然不合理。如果要避免這個情況,則每次發版打鏡像時都需要修改application.properties中的host,很不方便。

所以當前項目決定將swagger2的host配置到k8s的環境變量裏面,由於不同開發環境創建Deployment對象的配置文件不同,所以避免了不同環境共用同一個host的情況。

最終解決方案:

在application.properties中添加:

swagger.host=${SERVER_HOST}

在創建Deployment對象的配置文件aws-k8s-devx.yaml中添加:

- name: SERVER_HOST
  value: xxx.biz/api            

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章