我尝试使用minikube仪表板制作简单的Kubernetes Pod和服务。首先,我使用以下yaml生成Kubernetes mysql服务。
apiVersion: v1
kind: Pod
metadata:
name: blog-db
labels:
app: blog-mysql
spec:
containers:
- name: blog-mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_PASSWORD
value: password
- name: MYSQL_DATABASE
value: test
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: blog-db-svc
spec:
selector:
app: blog-mysql
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
externalIPs:
- 10.96.10.10
mysql服务已成功生成。但是我的前端应用程序docker映像是使用Spring Boot构建的,因此我必须将正确的mysql连接url分配到application.properties文件中,如下所示,
# ==============================================================
# = MySQL DataSource properties
# ==============================================================
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://10.96.10.10:3306/test?characterEncoding=utf8&serverTimezone=Asia/Seoul
spring.datasource.username = root
spring.datasource.password = password
我将服务资源的外部IP的IP地址10.9.6.10.10输入到Spring Boot application.properties文件中。但是连接不成功。我用kubectl cli命令检查了mysql服务的属性,
> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
blog-db-svc ClusterIP 10.104.29.31 10.96.10.10 3306/TCP 30m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d
然后将每个IP地址插入我的Docker容器的application.properties中。但是mysql连接的一切努力都失败了。如何在kubernetes服务资源上为mysql连接设置正确的外部IP?
答案 0 :(得分:2)
如果kubernetes集群中同时运行mysql和spring boot应用程序,则您不使用外部IP从spring boot app连接到mysql。外部IP是用于从外部kubernetes访问kubernetes内部运行的内容强>。如果它们都在同一命名空间中运行,则可以使用servicename:port
即blog-db-svc:3306
从spring boot应用程序引用mysql。
如果mysql和spring boot应用程序位于不同的命名空间中,则可以在spring boot应用程序命名空间中创建本地服务,以引用位于不同命名空间中的mysql服务。
kind: Service
apiVersion: v1
metadata:
name: service-y
namespace: namespace-a
spec:
type: ExternalName
externalName: service-x.namespace-b.svc.cluster.local
ports:
- port: 3306
这是guide,介绍如何在minikube中将mysql与spring boot结合使用。