天天看點

Spring Cloud 2.x系列之網關zuul入門(一)

基于Spring的微服務結點在能力上沒有高低貴賤之分,但是在角色上會分為邊緣服務和内部服務兩部分。内部服務是為對内暴露服務的結點,供架構内部來調用;邊緣服務是對外部網絡暴露的服務結點,也就是對外API接口。

開發人員為了防止服務被黑客攻擊,需要編寫各種權限機制,這些機制在每個微服務結點都要實作一次。一旦鑒權上有什麼bug,又要全部節點上推倒重來,噩夢;運維人員在邊緣服務前段都會架一個F5或者Nginx等負載均衡的代理,需要手動維護一份服務清單和服務位址的路由資訊,随着結點的擴充或位址調整這份清單要變來變去。

為了解決鑒權重複的問題,使業務結點本身隻關心實作自己的業務,将對權限的處理抽離到上層。外部客戶先請求到Zuul上,在Zuul服務上對權限進行統一實作和過濾,以實作微服務結點的過濾和驗證;為了解決請求路由和安全過濾,Spring Cloud推出了一個API gateway元件:Spring Cloud Zuul。

Spring Cloud 2.x系列之網關zuul入門(一)

Zuul對路由的配置有三種方式:

第一種(path-url):如果請求/sina這個位址,将會轉發到http://www.sina.com.cn上去

第二種(path-serviceId):如果請求/user-consumer開頭的位址,将會轉發到eureka上serviceId為sc-user-provider這個服務上去。

第三種(給微服務名指定path):給sc-user-provider這個微服務指定了它的請求位址是/user-service/**

(其實這裡還隐藏了第四種:什麼都不配,預設給注冊到eureka上的所有服務以第三種方式進行路由,path就是微服務自己的名字,但是此種方式又是不安全的,相當于将非邊緣服務也暴露給外網,一般需要關閉這個預設配置zuul.ignored-services=*,或者至少将受保護的微服務清單維護到zuul.ignored-services中)

今天介紹一下第一種方式

1、建立項目sc-zuul,對應的pom.xml檔案如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>

   <groupId>spring-cloud</groupId>

   <artifactId>sc-zuul</artifactId>

   <version>0.0.1-SNAPSHOT</version>

   <packaging>jar</packaging>

   <name>sc-zuul</name>

   <url>http://maven.apache.org</url>



   <parent>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-parent</artifactId>

      <version>2.0.4.RELEASE</version>

   </parent>

   <dependencyManagement>

      <dependencies>

        <dependency>

           <groupId>org.springframework.cloud</groupId>

           <artifactId>spring-cloud-dependencies</artifactId>

           <version>Finchley.RELEASE</version>

           <type>pom</type>

           <scope>import</scope>

        </dependency>

      </dependencies>

   </dependencyManagement>

   <properties>

      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

      <maven.compiler.source>1.8</maven.compiler.source>

      <maven.compiler.target>1.8</maven.compiler.target>

   </properties>

   <dependencies>

      <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>

      </dependency>



   </dependencies>

</project>           

2、建立配置檔案application.yml

server:

  port: 8070

spring:

  application:

    name: sc-zuul


zuul:

  routes:

    sina:

      path: /sina/**

      url:http://www.sina.com.cn

    baidu:

      path: /baidu/**

      url:http://www.baidu.com           

3、建立啟動類ZuulApplication.java

package sc.zuul;



import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;



@SpringBootApplication

@EnableZuulProxy

public  classZuulApplication {


   public static void main(String[] args) {

      SpringApplication.run(ZuulApplication.class, args);

   }

}           

4、啟動項目

Spring Cloud 2.x系列之網關zuul入門(一)

5、驗證

通路位址http://127.0.0.1:8070/baidu/跳轉到百度

Spring Cloud 2.x系列之網關zuul入門(一)

通路位址http://127.0.0.1:8070/sina/跳轉到新浪

Spring Cloud 2.x系列之網關zuul入門(一)

參考

https://blog.csdn.net/yejingtao703/article/details/77816555/
https://www.cnblogs.com/ityouknow/p/6944096.html           

源碼:

https://gitee.com/hjj520/spring-cloud-2.x/tree/master/sc-zuul           

本文作者: java樂園

本文來自雲栖社群合作夥伴“

JAVA樂園

”,了解相關資訊可以關注“