【问题标题】:Kubernetes spring application in docker connect external servicedocker中的Kubernetes spring应用程序连接外部服务
【发布时间】:2021-09-16 20:34:00
【问题描述】:

我是 Kubernetes 和 docker 世界的新手 :)

我尝试在 kubernetes 的 docker 中部署我们的应用程序,但我无法连接到外部 mysql 数据库。 我的步骤: 1、在我们的新服务器上用 kubeadm 安装 kubernetes。 2,使用mvn spring-boot:build-image从我们的应用程序创建一个docker镜像 3、我创建一个部署和服务yaml来使用镜像。

部署 YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  labels:
    app: demo-app
  name: demo-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-app
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: demo-app
    spec:
     containers:
     - image: demo/demo-app:0.1.05-SNAPSHOT
       imagePullPolicy: IfNotPresent
       name: demo-app-service
       env:
         - name: SPRING_DATASOURCE_URL
           value: jdbc:mysql://mysqldatabase/DBDEV?serverTimezone=Europe/Budapest&useLegacyDatetimeCode=false
       ports:

       - containerPort: 4000
       volumeMounts:
       - name: uploads
         mountPath: /uploads
       - name: ssl-dir
         mountPath: /ssl
     volumes:
     - name: ssl-dir
       hostPath:
         path: /var/www/dev.hu/backend/ssl
     - name: uploads
       hostPath:
         path: /var/www/dev.hu/backend/uploads
     restartPolicy: Always

服务 YAML:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: demo-app
  name: demo-app
  namespace: default
spec:
  ports:
    - port: 4000
      name: spring
      protocol: TCP
      targetPort: 4000
  selector:
    app: demo-app
  sessionAffinity: None
  type: LoadBalancer

4、创建endpoints和Service YAML,与外界通信:

kind: Endpoints
apiVersion: v1
metadata:
  name: mysqldatabase
subsets:
  - addresses:
    - ip: 10.10.0.42
    ports:
    - port: 3306
---
kind: Service
apiVersion: v1
metadata:
  name: mysqldatabase
spec:
  type: ClusterIP
  ports:
  - port: 3306
    targetPort: 3306

但它不起作用,当我要查看日志时,我看到 spring 无法连接到数据库。

Caused by: java.net.UnknownHostException: mysqldatabase
        at java.net.InetAddress.getAllByName0(InetAddress.java:1281)
        at java.net.InetAddress.getAllByName(InetAddress.java:1193)
        at java.net.InetAddress.getAllByName(InetAddress.java:1127)
        at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:132)
        at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)

感谢您的帮助

【问题讨论】:

  • 尝试使用值:jdbc:mysql://mysqldatabase.default
  • 不工作:(

标签: spring-boot docker kubernetes


【解决方案1】:

等一下。您不会自己创建端点。当服务具有匹配的 pod 时,端点由 kubernetes 注册。现在,您已经部署了应用程序并通过服务公开了它。

如果您想通过服务连接到您的 mysql 数据库,则需要部署它和 kubernetes。如果它不是托管在 kubernetes 上,您将需要一个主机名或数据库的 IP 地址,并相应地调整您的 SPRING_DATASOURCE_URL!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 2019-03-05
    • 2019-03-01
    • 2020-07-29
    • 2021-04-12
    • 1970-01-01
    • 2021-11-01
    • 2020-09-28
    相关资源
    最近更新 更多