1.1、背景
写这篇文章的目的是为了说明以下问题:如何使用TCP协议相同的端口访问网格外多个服务? 这是最近直播的时候有一个同学提出的,当时我没有完全明白,“访问多集群” 的意思。后来仔细思考了一下,问题应该就是Istio服务网格内如何通过相同的协议,端口访问不同的服务。
1.2、使用场景
肯定会有人回答,既然相同的端口不能使用,何不换一个端口呢,这样做也是一种解决方法。我在想有一些场景一定没法或者不方便绕过去。
-
假如同一个网格内部署了生产,测试,开发三套环境,都需要通过3306端口访问对应环境的mysql数据库。
-
假如同一个网格内部署了生产,测试,开发三套环境,都需要通过6379端口访问对应环境的redis。
在微服务盛行的今天,往往需要团队之间协作,没办法保证所有的微服务都运行在同一服务网格内。尤其是中间件服务,作为公司公共服务,一定是业务共享的。既然我们不可避免的需要使用相同的端口,访问外部服务,接下来告诉大家两种方案解决以上问题。
1.3、解决方案
通过相同的端口443访问 https://github.com 和 https://www.huaweicloud.com,从网格内访问外部服务,需要分别创建对应的ServiceEntentry:
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: hwcloud
spec:
hosts:
- www.huaweicloud.com
ports:
- number: 443
name: tcp
protocol: TCP
resolution: DNS
location: MESH_EXTERNAL
EOF
2) github.com
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3