Kubernetes Istio-连接到外部ip

Kubernetes Istio-连接到外部ip,kubernetes,istio,Kubernetes,Istio,我安装了Istio gateways.istio-egressgateway.enabled = true 当我尝试连接到外部数据库时,我收到一个错误。 我没有仅限域的ip和端口,因此我定义了以下规则: apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: external-db spec: hosts: - external-db.tcp.svc addresses: - 1

我安装了Istio

gateways.istio-egressgateway.enabled = true
当我尝试连接到外部数据库时,我收到一个错误。 我没有仅限域的ip和端口,因此我定义了以下规则:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-db
spec:
  hosts:
  - external-db.tcp.svc
  addresses:
  - 190.64.31.232/32
  ports:
  - number: 3306
    name: tcp
    protocol: TCP
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: 190.64.31.232
然后,我在部署在服务网格中的系统中打开一个Shell 它无法解析名称

$ ping external-db.tcp.svc
ping: ceip-db.tcp.svc: Name or service not known
但我可以使用ip地址连接

$ ping 190.64.31.232
PING 190.64.31.232 (190.64.31.232) 56(84) bytes of data.
64 bytes from 190.64.31.232: icmp_seq=1 ttl=249 time=1.35 ms
64 bytes from 190.64.31.232: icmp_seq=2 ttl=249 time=1.42 ms
发生了什么事?我必须使用域或ip连接吗?
我可以为我的外部ip定义一个内部域吗

您可以使用硬编码的IP端点创建无头服务:

---
apiVersion: v1
kind: Service
metadata:
  name: external-db
spec:
  clusterIP: None
  ports:
  - protocol: TCP
    port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-db
subsets:
  - addresses:
    - ip: 190.64.31.232
    ports:
    - port: 3306

然后您可以向ServiceEntry中添加主机外部db.default.svc.cluster.local

您可以使用硬编码的IP端点创建无头服务:

---
apiVersion: v1
kind: Service
metadata:
  name: external-db
spec:
  clusterIP: None
  ports:
  - protocol: TCP
    port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-db
subsets:
  - addresses:
    - ip: 190.64.31.232
    ports:
    - port: 3306

然后您可以向ServiceEntry中添加主机外部db.default.svc.cluster.local

问题在于解析DNS,它基本上与ServiceEntry中的解析配置有关

根据istio的:

解析确定代理将如何解析与服务关联的网络端点的IP地址,以便可以路由到其中一个端点

由于您已将其配置为静态,因此您正在告诉istio proxy/Environment查找用于解析该DNS名称的端点;因此,您需要将端点定义为


另一种简单的方法是,如果DNS名称是在网格之外定义的,则只需将解析更改为DNS,这将强制istio代理在请求处理期间查询DNS服务器。

问题在于解析DNS,它基本上与ServiceEntry中的解析配置有关

根据istio的:

解析确定代理将如何解析与服务关联的网络端点的IP地址,以便可以路由到其中一个端点

由于您已将其配置为静态,因此您正在告诉istio proxy/Environment查找用于解析该DNS名称的端点;因此,您需要将端点定义为


另一种简单的方法是,如果DNS名称是在网格之外定义的,则只需将解析更改为DNS,这将强制istio代理在请求处理期间查询DNS服务器。

是否尝试通过IP连接?它有效吗?@VasilyAngapov是的,ip有效。创建ServiceEntry后,我可以通过IP连接,但它无法解析我定义的域名external-db.tcp.svc。这是正确的行为吗?我可以用名字连接吗?你试过用IP连接吗?它有效吗?@VasilyAngapov是的,ip有效。创建ServiceEntry后,我可以通过IP连接,但它无法解析我定义的域名external-db.tcp.svc。这是正确的行为吗?我可以用名字连接吗?这对我来说很有效,除了我必须使用常规clusterIP服务,而且ServiceEntry在黑洞cluser中被Istio忽略!这对我来说很有效,除了我必须使用常规的clusterIP服务,而且ServiceEntry在黑洞cluser中被Istio忽略!