使用AKS管理容器时的问题

时间:2018-08-05 04:26:08

标签: kubernetes azure-kubernetes

我正在使用docker + AKS管理我的容器。当我在本地/或使用docker-compose在VM上运行容器时,.my服务(已容器化)可以与也在容器中的数据库进行通信。这些容器之间的桥梁是使用网络创建的。在将所有应用程序的docker-compose文件转换为相应的yaml对应文件并将容器部署到AKS(单节点)之后,我的容器化服务无法访问数据库。

我所有的容器都有3个yaml文件

  1. PVC
  2. 部署(用于广告连播)
  3. svc。

我已经经历了许多AKS示例入门,由于某种原因,我无法弄清楚。所有应用程序服务都使用负载平衡器公开公开。我的问题更像是如何定义应用程序服务应连接到哪个数据库,因为网络的概念已不复存在。

在为KS提供的示例中,所有前端服务所做的就是创建一个env并指定后端服务的名称。我也尝试过,但我的应用程序仍然无法正常工作。我要验证其设置的示例是https://docs.microsoft.com/en-gb/azure/aks/kubernetes-walkthrough#run-the-application

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

如果仅在内部需要这些服务,则不应使用负载平衡器公开公开它。

Kubernetes有两种发现服务的可能性。 DNS和环境变量。虽然DNS是可选组件,但没有它,我看不到任何群集。我还假设AKS使用它。

例如,您有一个Postgres数据库,想在其他地方使用它:

apiVersion: extensions/v1beta1
kind: Deployment

metadata:
  name: postgres
  labels:
    app: postgres

spec:
  replicas: 1

  template:
    metadata:
      labels:
        app: postgres

    spec:
      containers:
      - name: db
        image: postgres:11

        ports:
        - name: postgres
          containerPort: 5432

这将创建一个暴露端口5432的部署。标签app: postgres在这里也很重要,因为稍后我们需要它来标识创建的Pod。

现在我们需要为其创建服务:

apiVersion: v1
kind: Service

metadata:
  name: postgres
  labels:
    app: postgres

spec:
  type: ClusterIP # default value

  selector:
    app: postgres

  ports:
  - port: 5432

这将创建一个虚拟IP地址,并将所有带有标签app: postgres的就绪Pod注册到其中。由于服务的名称是postgres,并且它是默认的名称空间,因此可以通过postgres.default.svc.cluster.local:5432访问postgres。您可以在其他应用程序(例如Python)中将此地址和端口连接到数据库。