zoukankan      html  css  js  c++  java
  • 无法从k8s pod访问外部数据库

    无法从Kubernetes Pod内部连接到外部数据库(Cannot connecto to external database from inside kubernetes pod)

     1101 2020-08-11 IT屋

    Google Fac戳这里《

    百度翻译此文 有道翻译此文

    我正在尝试将kubernetes pod中的spring-boot api连接到外部数据库(单独的机器,但是在本地网络中),但是在运行时,我得到SQLNonTransientConnectionException,UknownHostException:mysql-svc,该api无法连接到数据库,但是每当我使用kubectl exec -it从pod内部ping主机中的数据库地址时,我都能成功ping到任何遇到与我相同的错误的人吗?

    这是我的application.properties连接uri和kubernetes对象:

    spring.datasource.url=jdbc:mysql://mysql-svc/test?autoReconnect=true

    ---

    apiVersion: v1

    kind: Service

    metadata:

     name: mysql-svc

    spec:

     type: ClusterIP

     ports:

     - port: 3306

       targetPort: 3306

    ---

    apiVersion: v1

    kind: Endpoints

    metadata:

     name: mysql-svc

    subsets:

     - addresses:

       - ip: 10.0.123.28

       ports:

       - port: 3306

         name: mysql-svc

    解决方案

    经过数小时的挖掘和重新配置,终于可以正常工作了,这要归功于kubernetes组的Xenwar指出了externalIP属性,事实证明我需要将我的应用程序指向外部ip(在本例中为数据库),这是服务对象:

    apiVersion: v1

    kind: Service

    metadata:

      name: db-con

    spec:

      selector:

        app: api2

      ports:

        - name: http

          protocol: TCP

          port: 3306

          targetPort: 3306

      externalIPs:

        - 10.0.123.28

    原文

    I am trying to connect my spring-boot api inside a kubernetes pod to an external database (a separate machine but within the local network), however when running, I get SQLNonTransientConnectionException, UknownHostException: mysql-svc, the api cannot connect to the database but whenever I ping the database address from inside the pod using kubectl exec -it, I can ping it successfully, anybody who has experienced the same error as mine?

    here is my application.properties connection uri and kubernetes objects:

    spring.datasource.url=jdbc:mysql://mysql-svc/test?autoReconnect=true

    ---

    apiVersion: v1

    kind: Service

    metadata:

     name: mysql-svc

    spec:

     type: ClusterIP

     ports:

     - port: 3306

       targetPort: 3306

    ---

    apiVersion: v1

    kind: Endpoints

    metadata:

     name: mysql-svc

    subsets:

     - addresses:

       - ip: 10.0.123.28

       ports:

       - port: 3306

         name: mysql-svc

    解决方案

    After hours of digging and reconfiguring, I finally get it to work, thanks to Xenwar from kubernetes group for pointing out the externalIP property, it turns out that i need to point my app to an external ip, in this case the database, here is the service object:

    apiVersion: v1

    kind: Service

    metadata:

      name: db-con

    spec:

      selector:

        app: api2

      ports:

        - name: http

          protocol: TCP

          port: 3306

          targetPort: 3306

      externalIPs:

        - 10.0.123.28

  • 相关阅读:
    说说如何用js实现一个模板引擎
    JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
    React之ref详细用法
    安装SQL Server提示“重叠的IO操作正在进行”解决
    HDU3746 Cyclic Nacklace 【KMP】
    读<大数据日知录:架构与算法>有感
    VMware虚拟机安装Linux英文改中文系统并更新yum安装输入法
    数据结构的基本概念
    MFC TreeCtrl 控件(一):简单使用
    Java生成word文档
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15193430.html
Copyright © 2011-2022 走看看