使用 AKS 管理容器时的问题
Issues when using AKS to manage containers
我正在使用 docker + AKS 来管理我的容器。当我 运行 我的容器 locally/or 在虚拟机上使用 docker-compose ..我的服务(容器化)可以与我的数据库通信,这些数据库也在容器中。这些容器之间的桥梁是使用网络创建的。在我将我所有应用程序的 docker-compose 文件转换为相应的 yaml 副本并将我的容器部署到 AKS(单节点)后,我的容器化服务无法访问数据库。
我所有的容器都有 3 个 yaml 文件
- PVC
- 部署(针对 pods)
- 服务。
我看过许多 AKS 入门示例,但出于某种原因我无法弄明白。所有应用程序服务都使用负载平衡器公开公开。我的问题更像是如何定义应用程序服务应该连接到哪个数据库,因为网络的概念不再存在。
在为 KS 提供的示例中,所有前端服务所做的就是创建一个环境并指定后端服务的名称。我也试过了,但我的应用程序仍然无法运行。我提到的验证我的设置的示例是 https://docs.microsoft.com/en-gb/azure/aks/kubernetes-walkthrough#run-the-application.
任何帮助都会很棒。
如果您仅在内部需要这些服务,则不应使用负载均衡器将其公开。
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
在这里也很重要,因为稍后我们需要它来识别创建的 Pods。
现在我们需要为它创建一个服务:
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: ClusterIP # default value
selector:
app: postgres
ports:
- port: 5432
这将创建一个虚拟 IP 地址并使用标签 app: postgres
注册所有就绪 pods。由于服务的名称是 postgres
并且它是默认命名空间,现在可以通过 postgres.default.svc.cluster.local:5432
访问 postgres。您可以在其他应用程序(例如 Python)中使用此地址和端口连接到数据库。
我正在使用 docker + AKS 来管理我的容器。当我 运行 我的容器 locally/or 在虚拟机上使用 docker-compose ..我的服务(容器化)可以与我的数据库通信,这些数据库也在容器中。这些容器之间的桥梁是使用网络创建的。在我将我所有应用程序的 docker-compose 文件转换为相应的 yaml 副本并将我的容器部署到 AKS(单节点)后,我的容器化服务无法访问数据库。
我所有的容器都有 3 个 yaml 文件
- PVC
- 部署(针对 pods)
- 服务。
我看过许多 AKS 入门示例,但出于某种原因我无法弄明白。所有应用程序服务都使用负载平衡器公开公开。我的问题更像是如何定义应用程序服务应该连接到哪个数据库,因为网络的概念不再存在。
在为 KS 提供的示例中,所有前端服务所做的就是创建一个环境并指定后端服务的名称。我也试过了,但我的应用程序仍然无法运行。我提到的验证我的设置的示例是 https://docs.microsoft.com/en-gb/azure/aks/kubernetes-walkthrough#run-the-application.
任何帮助都会很棒。
如果您仅在内部需要这些服务,则不应使用负载均衡器将其公开。
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
在这里也很重要,因为稍后我们需要它来识别创建的 Pods。
现在我们需要为它创建一个服务:
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: ClusterIP # default value
selector:
app: postgres
ports:
- port: 5432
这将创建一个虚拟 IP 地址并使用标签 app: postgres
注册所有就绪 pods。由于服务的名称是 postgres
并且它是默认命名空间,现在可以通过 postgres.default.svc.cluster.local:5432
访问 postgres。您可以在其他应用程序(例如 Python)中使用此地址和端口连接到数据库。