Сценарий: у меня есть 2 кластера: A и B, оба с установленным istio.Я хочу представить service-1 в кластере A как service-1.suffix и позволить service-2 в кластере B получить доступ к service-1 с помощью: service-1.suffix.Следующая картинка иллюстрирует мою идею. В кластере A я определяю virtualService и шлюз для маршрутизации запросов к 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"
VirtualService:
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
Следующим шагом является создание Egress и VirtualService в кластере B. Вот мои файлы определений:
ServiceEntry:
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
VirtualService:
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
Редактировать: Когда я использую другое разрешаемое имя хоста, например www.google.com, в serviceentry, я могу его получить, запросы на www.google.com будут перенаправлены на сервис-1 в кластере A. Простото же самое, если я использую nip.io в качестве суффикса, он работает хорошо.Тем не менее, составленное имя service-1.suffix не может быть разрешено.