如何为命名空间之外的pod提供托管在命名空间之外的mysql实例?

时间:2019-07-15 12:19:37

标签: kubernetes kubernetes-helm

我需要将命名空间A中托管的mysql数据库提供给部署在命名空间'B'中的应用程序。

到目前为止,我已经尝试了几种方法,其中最有前途的是结合使用Endpoint和服务,例如:

kind: Service
apiVersion: v1
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
      targetPort: 31234
---
kind: Endpoints
apiVersion: v1
metadata:
  name: mysql
subsets:
  - addresses:
      - ip: 12.34.567.8
    ports:
      - port: 31234

虽然mysql容器的一个实例已经在命名空间'A'中被剥离,并通过NodePort配置在31234暴露。

该应用程序有一个初始化容器init-mysql,它对mysql实例执行ping操作,并带有主机名“ mysql”和正确的凭据。 我希望该应用程序能够像往常一样启动,但是它处于pod初始化状态。 当我尝试检查init-mysql的日志时,只有以下内容:

Warning: Using a password on the command line interface can be insecure.

用于initContainer'init-mysql'的命令是:

          command:
            - sh
            - -c
            - 'mysqladmin ping -hmysql -P3306 -uusername -ppassword'

1 个答案:

答案 0 :(得分:0)

有人问这个问题here

我发布了Paul(社区Wiki)可接受的答案,以提高可见度:

  

我偶然发现了同一问题,并找到了一个不错的解决方案   不需要任何静态IP配置:

     

您可以通过DNS name访问服务(如您所述):    servicename.namespace.svc.cluster.local

     

您可以使用该DNS名称在another namespace via a local service中引用它:

     
kind: Service
apiVersion: v1
metadata:
  name: service-y
  namespace: namespace-a
spec:
  type: ExternalName
  externalName: service-x.namespace-b.svc.cluster.local
  ports:
  - port: 80