Как разрешить istio разрешать самостоятельно определенные хосты - PullRequest
0 голосов
/ 16 ноября 2018

Сценарий: у меня есть 2 кластера: A и B, оба с установленным istio.Я хочу представить service-1 в кластере A как service-1.suffix и позволить service-2 в кластере B получить доступ к service-1 с помощью: service-1.suffix.Следующая картинка иллюстрирует мою идею.enter image description here В кластере 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 не может быть разрешено.

1 Ответ

0 голосов
/ 16 ноября 2018

Определение службы Kubernetes ExternalName со случайным IP:

kind: Service
apiVersion: v1
metadata:
  name: service1
spec:
  type: ExternalName
  externalName: 1.1.1.1
...