Kubernetes服务的对外连接IP地址是多少?
What is the external connection IP address of Kubernetes service?
我尝试使用 minikube 仪表板制作简单的 Kubernetes Pods 和服务。首先,我使用以下 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 引导构建的,所以我必须将正确的 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
我在spring引导application.properties文件中输入服务资源外部IP的IP地址10.96.10.10。但是连接不成功。我用 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?
如果 mysql 和 spring boot app 运行 都在 kubernetes 集群中,那么你不使用外部 IP 从 [=26] 连接到 mysql =] boot app.外部 IP 用于从 kubernetes 外部访问 kubernetes 内部的东西 运行。您可以使用 servicename:port
即 blog-db-svc:3306
从 spring 启动应用程序引用 mysql 如果它们都在同一命名空间中 运行。
如果 mysql 和 spring boot app 在不同的命名空间中,那么你可以在 spring boot app 命名空间中创建一个本地服务来引用位于不同命名空间中的 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 启动。
我尝试使用 minikube 仪表板制作简单的 Kubernetes Pods 和服务。首先,我使用以下 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 引导构建的,所以我必须将正确的 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
我在spring引导application.properties文件中输入服务资源外部IP的IP地址10.96.10.10。但是连接不成功。我用 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?
如果 mysql 和 spring boot app 运行 都在 kubernetes 集群中,那么你不使用外部 IP 从 [=26] 连接到 mysql =] boot app.外部 IP 用于从 kubernetes 外部访问 kubernetes 内部的东西 运行。您可以使用 servicename:port
即 blog-db-svc:3306
从 spring 启动应用程序引用 mysql 如果它们都在同一命名空间中 运行。
如果 mysql 和 spring boot app 在不同的命名空间中,那么你可以在 spring boot app 命名空间中创建一个本地服务来引用位于不同命名空间中的 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 启动。