Istio无法访问MySQL的外部服务,怎么办?
Istio cannot access external services of MySQL,what should I do?
我建了一个spring启动工程,用Kubernetes Deployment
部署,其配置文件如下:
server:
port: 80
spring:
application:
name: demo-kube-svca
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql.dev.svc.cluster.local/kube
username: root
password: 123456
我的 mysql 数据库很容易部署 docker:
Docker run -d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--name=mysql \
--privileged=true \
Mysql: 8.0
最后,我想将 MySQL 服务导入到带有 ServiceEntry
的服务网格中。
apiVersion: networking.istio.io/v1alpha3
Kind: ServiceEntry
Metadata:
Name: mysql-external
Spec:
Hosts:
- mysql.dev.svc.cluster.local
Addresses:
- 192.168.0.123/32
Ports:
- number: 3306
Name: mysql
Protocol: tcp
Location: MESH_EXTERNAL
但是,当我使用程序访问数据库时,日志中报错:
Caused by: java.net.UnknownHostException: mysql.dev.svc.cluster.local: Name does not resolve
我参考了官方文档:https://istio.io/blog/2018/egress-tcp/,
我觉得可能是我的配置有问题,但是我不知道怎么办,你能帮我吗?
ServiceEntry
只为你打开 sidecar 代理中的防火墙 - 你仍然需要 mysql 部署在 Kubernetes 上才能使用 mysql.dev.svc.cluster.local svc 或者如果你有 mysql 部署在 IP 下192.168.0.123 请用它代替主机。
编辑:
如果您需要使用 Kubernetes 中的服务覆盖 192.168.0.123 IP 地址,您应该使用 external service - 正如我写的 Istio 的 ServiceEntry 仅配置防火墙。
我建了一个spring启动工程,用Kubernetes Deployment
部署,其配置文件如下:
server:
port: 80
spring:
application:
name: demo-kube-svca
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql.dev.svc.cluster.local/kube
username: root
password: 123456
我的 mysql 数据库很容易部署 docker:
Docker run -d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--name=mysql \
--privileged=true \
Mysql: 8.0
最后,我想将 MySQL 服务导入到带有 ServiceEntry
的服务网格中。
apiVersion: networking.istio.io/v1alpha3
Kind: ServiceEntry
Metadata:
Name: mysql-external
Spec:
Hosts:
- mysql.dev.svc.cluster.local
Addresses:
- 192.168.0.123/32
Ports:
- number: 3306
Name: mysql
Protocol: tcp
Location: MESH_EXTERNAL
但是,当我使用程序访问数据库时,日志中报错:
Caused by: java.net.UnknownHostException: mysql.dev.svc.cluster.local: Name does not resolve
我参考了官方文档:https://istio.io/blog/2018/egress-tcp/, 我觉得可能是我的配置有问题,但是我不知道怎么办,你能帮我吗?
ServiceEntry
只为你打开 sidecar 代理中的防火墙 - 你仍然需要 mysql 部署在 Kubernetes 上才能使用 mysql.dev.svc.cluster.local svc 或者如果你有 mysql 部署在 IP 下192.168.0.123 请用它代替主机。
编辑:
如果您需要使用 Kubernetes 中的服务覆盖 192.168.0.123 IP 地址,您应该使用 external service - 正如我写的 Istio 的 ServiceEntry 仅配置防火墙。