Kubernetes部署中的DNS未按预期工作
我精通Docker,但K8肯定出了什么问题。我正在用Kubernetes部署中的DNS未按预期工作,kubernetes,minikube,skaffold,Kubernetes,Minikube,Skaffold,我精通Docker,但K8肯定出了什么问题。我正在用minikube运行skaffold,并试图让容器之间的DNS工作。以下是我的部署: kind: Deployment apiVersion: apps/v1 metadata: name: my-api labels: app: my-api spec: replicas: 1 selector: matchLabels: app: my-api template: metadata:
minikube
运行skaffold
,并试图让容器之间的DNS工作。以下是我的部署:
kind: Deployment
apiVersion: apps/v1
metadata:
name: my-api
labels:
app: my-api
spec:
replicas: 1
selector:
matchLabels:
app: my-api
template:
metadata:
name: my-api
labels:
app: my-api
spec:
containers:
- name: my-api-postgres
image: postgres:11.2-alpine
env:
- name: POSTGRES_USER
value: "my-api"
- name: POSTGRES_DB
value: "my-api"
- name: POSTGRES_PASSWORD
value: "my-pass"
ports:
- containerPort: 5432
- name: my-api-redis
image: redis:5.0.4-alpine
command: ["redis-server"]
args: ["--appendonly", "yes"]
ports:
- containerPort: 6379
- name: my-api-node
image: my-api-node
command: ["npm"]
args: ["run", "start-docker-dev"]
ports:
- containerPort: 3000
但是,在此场景中,
myapi节点
无法通过DNS主机名myapi postgres
联系myapi postgres
。知道我做错了什么吗?您已经将所有3个容器定义为同一个吊舱的一部分。POD有一个通用的网络名称空间,因此在当前设置中(这是不正确的,稍后将详细介绍),您可以使用localhost:
与其他容器通信
做到这一点的“正确”方法是为每个应用程序创建一个新的部署,并使用
您的示例将大致变成(未经测试):
DNS记录为服务注册,因此您将连接到这些服务,并被转发到其后面的POD(简化)。如果您需要从外部世界访问节点应用程序,这是一个完整的附加交易,您应该查看类型服务,或者。您已经将所有3个容器定义为同一pod的一部分。POD有一个通用的网络名称空间,因此在当前设置中(这是不正确的,稍后将详细介绍),您可以使用
localhost:
与其他容器通信
做到这一点的“正确”方法是为每个应用程序创建一个新的部署,并使用
您的示例将大致变成(未经测试):
DNS记录为服务注册,因此您将连接到这些服务,并被转发到其后面的POD(简化)。如果您需要从外部世界访问您的节点应用程序,这是一个完整的附加交易,您应该查看类型服务,或者。作为johnharris85 DNS的补充,当您将分离应用程序时,您应该在您的场景中这样做 多容器吊舱通常用于特定的用例中,例如侧车容器,以帮助主容器完成某些特定任务或代理、网桥和适配器,例如提供到某些特定目的地的连接 在您的情况下,您可以轻松地将它们分开。在本例中,您有一个带有1个Pod的部署,其中有3个容器通过localhost而不是前面提到的DNS名称彼此通信。 在此之后,我建议您阅读Kubernetes内部的DNS,以及如何与逐步进入游戏的服务一起工作。
如果是豆荚,你可以阅读更多 作为johnharris85 DNS的补充,当您将分离应用程序时,您应该在您的场景中这样做 多容器吊舱通常用于特定的用例中,例如侧车容器,以帮助主容器完成某些特定任务或代理、网桥和适配器,例如提供到某些特定目的地的连接 在您的情况下,您可以轻松地将它们分开。在本例中,您有一个带有1个Pod的部署,其中有3个容器通过localhost而不是前面提到的DNS名称彼此通信。 在此之后,我建议您阅读Kubernetes内部的DNS,以及如何与逐步进入游戏的服务一起工作。 如果是豆荚,你可以阅读更多
kind: Deployment
apiVersion: apps/v1
metadata:
name: my-api-node
namespace: my-api
labels:
app: my-api-node
spec:
replicas: 1
selector:
matchLabels:
app: my-api-node
template:
metadata:
name: my-api-node
labels:
app: my-api-node
spec:
containers:
- name: my-api-node
image: my-api-node
command: ["npm"]
args: ["run", "start-docker-dev"]
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
namespace: my-api
name: my-api-node
spec:
selector:
app: my-api-node
ports:
- protocol: TCP
port: 3000
targetPort: 3000
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: my-api-redis
namespace: my-api
labels:
app: my-api-redis
spec:
replicas: 1
selector:
matchLabels:
app: my-api-redis
template:
metadata:
name: my-api-redis
labels:
app: my-api-redis
spec:
containers:
- name: my-api-redis
image: redis:5.0.4-alpine
command: ["redis-server"]
args: ["--appendonly", "yes"]
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
namespace: my-api
name: my-api-redis
spec:
selector:
app: my-api-redis
ports:
- protocol: TCP
port: 6379
targetPort: 6379
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: my-api-postgres
namespace: my-api
labels:
app: my-api-postgres
spec:
replicas: 1
selector:
matchLabels:
app: my-api-postgres
template:
metadata:
name: my-api-postgres
labels:
app: my-api-postgres
spec:
containers:
- name: my-api-postgres
image: postgres:11.2-alpine
env:
- name: POSTGRES_USER
value: "my-api"
- name: POSTGRES_DB
value: "my-api"
- name: POSTGRES_PASSWORD
value: "my-pass"
ports:
- containerPort: 5432
---
apiVersion: v1
kind: Service
metadata:
namespace: my-api
name: my-api-postgres
spec:
selector:
app: my-api-postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432