如何允许Kubernetes中的pod访问像mysql这样的外部docker容器ip



我想将Strapi CMS部署到Kubernetes。在我的本地机器上,我正试图用Minikube来实现这一点。该项目的结构是集群外另一个容器中的MySQL。我想通过这个IP172.17.0.2:3306从集群内部访问MySQL数据库

数据库位于集群之外,并且位于docker容器中。但Strapi项目生活在一个Kubernetes集群中。

这是我用来做Kubernetes的部署YAML文件:

apiVersion: apps/v1
kind: Deployment
metadata:
name: cg-api
spec:
selector:
matchLabels:
app: cg-api
replicas: 2
template:
metadata:
labels:
app: cg-api
spec:
containers:
- name: cg-api
image: alirezahd/cg-api
env:
- name: DATABASE_HOST
value: "172.17.0.2"
- name: DATABASE_PORT
value: "3306"
ports:
- containerPort: 1337

首先,您应该将MySQL端口3306暴露在容器外部。假设Docker运行MySQL容器的主机的IP地址为192.168.0.100。然后您可以telnet 192.168.0.100:3306以确保端口已公开且可用。

以下是Dockers文档中的一个示例:

docker run -p 192.168.0.100:3306:3306/tcp mysql-container-name bash

这将容器的端口3306绑定到主机192.168.0.100上的TCP端口3306。

然后您的CMS可以在minikube中连接到它。

尝试在minikube下部署dnsutils。它提供了nslookup、telnet等网络工具。它非常有助于解决minikube中的网络问题。您可以连接到它sudo kubernetes exec -it dnsutils -n default -- bash

您可以尝试使用特殊的minikube主机来访问您的根计算机。假设您已经使用-p3306:3306在根计算机上公开了docker-mysql容器

env:
- name: DATABASE_HOST
value: "host.minikube.internal"

https://minikube.sigs.k8s.io/docs/handbook/host-access/#hostminikubeinternal看起来你需要minikube v1.10+

最新更新