【发布时间】:2018-11-16 08:46:26
【问题描述】:
场景: 我有 2 个集群:A 和 B 都安装了 istio。我想将集群 A 中的 service-1 公开为 service-1.suffix,并让集群 B 中的 service-2 通过 service-1.suffix 访问 service-1。下图说明了我的想法。 在集群 A 中,我定义了一个 virtualService 和 Gateway 来将请求路由到 service-1。
网关:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: service-1
spec:
selector:
istio: ingressgateway # use istio default ingress gateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "service-1.suffix"
虚拟服务:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: service-1
spec:
hosts:
- service-1.default.svc.cluster.local
- "service-1.suffix"
gateways:
- service-1
- mesh
http:
- route:
- destination:
host: service-1.default.svc.cluster.local
port:
number: 8080
这很好,因为我可以使用 curl 成功访问它。
curl -I -HHost:service-1.suffix http://cluster_A_proxy:31380
下一步是在集群 B 中创建 Egress 和 VirtualService。这是我的定义文件:
服务入口:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: service-1
spec:
hosts:
- "service-1.suffix" #the global suffix mcm.com could be defined in mcm.
#addresses:
#- xxx/32
ports:
- number: 80
name: http
protocol: HTTP
resolution: STATIC
location: MESH_EXTERNAL
endpoints:
- address: 1.1.1.1 #The cluster A proxy ip
ports:
http: 31380
虚拟服务:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: service-1
spec:
hosts:
- "service-1.suffix"
http:
- route:
- destination:
host: "service-1.suffix"
port:
number: 80
在集群 B 中,当我尝试使用 curl 解析 service-1.suffix 时,我收到一个 DNS 错误,提示无法解析。
curl: (6) Could not resolve host: service-1.suffix
我该如何解决这个问题?
#The command I am using in an istio app in Cluster B:
kubectl exec -it pod_name -c container_name bash
curl -I -HHost:service-1.suffix http://service-1.suffix
编辑: 当我在 serviceentry 中使用另一个可解析的主机名(如 www.google.com)时,我可以通过它,对 www.google.com 的请求将被重定向到集群 A 中的 service-1。同样,如果我使用 nip.io 作为我的后缀,效果很好。但是,无法解析组成的名称 service-1.suffix。
【问题讨论】:
-
我有几个问题: 1. 你从哪里尝试这个命令
curl -I -HHost:service-1.suffix http://service-1.suffix? 2. 你在集群 B 中配置 Egress Gateway 了吗? -
@ArtemGolenyaev 嗨,我在集群 B 的睡眠服务中尝试了该命令。我使用 kubectl exec 进入。我没有配置 Egress Gateway,你能告诉我如何配置它吗?
标签: istio