整合Kong和Consul
一、先装个Consul,参考:Consul 快速入门
注意事项:启动时,可以添加 -dns-port=53
这样就可以走默认的DNS端口了。
二、然后装个Kong,参考:Kong的简介和安装 和 使用Docker安装Kong
注意事项:如果使用docker方式执行,网络需要使用host方式。
附Docker执行方式:
[root@local12 ~]# docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" postgres:9.6
[root@local12 ~]# docker run --rm \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=192.168.56.112" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:0.13.1-centos kong migrations up
[root@local12 ~]# docker run -d --name kong \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=192.168.56.112" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "DNS_RESOLVER=192.168.56.112" \
-p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 \
-v /mnt/kong.conf:/etc/kong/kong.conf \
kong:0.13.1-centos
[root@local12 ~]# docker run -d -p 1337:1337 --name konga pantsel/konga
三、检查一下效果
四、配置一个DNS SRV,后面用来做轮训
[root@local13 ~]# cat /etc/consul.d/web.json
{"service": {"name": "web", "tags": ["springboot"], "port": 8080}}
# local12同local13
# 查下结果
[root@local13 ~]# dig @192.168.56.112 web.service.consul SRV
...
;; QUESTION SECTION:
;web.service.consul. IN SRV
;; ANSWER SECTION:
web.service.consul. 0 IN SRV 1 1 8080 agent-two.node.dc1.consul.
web.service.consul. 0 IN SRV 1 1 8080 agent-one.node.dc1.consul.
至此,Kong与Consul就整合完成了。然后,我们再整合Spring Cloud,实现Kong网关到APP的DNS轮训。
Spring Cloud整合Consul
一、POM文件添加Spring Cloud依赖
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul-dependencies</artifactId>
<version>2.0.2.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
...
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
二、配置YML文件,添加CONSUL相关内容
spring:
cloud:
consul:
host: localhost
port: 8500
discovery:
register: true
hostname: 127.0.0.1
tags: version=1.0,author=Dreamson.Ma
healthCheckPath: /actuator/health
healthCheckInterval: 5s
instanceId: ${spring.application.name}:${spring.cloud.client.hostname}:${server.port}
三、Spring Boot入口添加相关注解
@EnableDiscoveryClient
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@Import({DynamicDataSourceConfig.class})
public class DreamsonApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DreamsonApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DreamsonApplication.class);
}
}
至此,Spring Cloud整合Consul已经完成。运行下看看效果吧。
通过Kong的DNS轮训访问应用
这次使用konga(kong的ui管理工具)进行配置。
一、配置一个Service
二、配置一个Route
三、然后就可以访问了
至此,Kong利用dns轮训访问后端应用的配置已经完成。可以自己随便关个应用测试一下。