Istio - 连接到外部 IP

use*_*108 2 kubernetes istio

我安装了 Istio

gateways.istio-egressgateway.enabled = true
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到外部数据库时,我收到错误。我没有域(只有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
Run Code Online (Sandbox Code Playgroud)

然后我在我的系统中打开一个 Shell(部署在我的服务网格中)并且它无法解析名称

$ ping external-db.tcp.svc
ping: ceip-db.tcp.svc: Name or service not known
Run Code Online (Sandbox Code Playgroud)

但我可以使用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
Run Code Online (Sandbox Code Playgroud)

怎么了?我必须使用域名或 IP 进行连接吗?我可以为我的外部 IP 定义一个内部域吗?

Vas*_*pov 7

您可以使用硬编码的 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
Run Code Online (Sandbox Code Playgroud)

然后你可以向你的 ServiceEntry 添加一个主机external-db.default.svc.cluster.local