我想在一个pod和主机中的两个容器之间进行通信,以便更好地了解kubernetes ketworking:
#DockerfileA
FROM debian:sid
RUN /bin/bash -c "apt-get update && apt-get install -y netcat"
CMD /bin/bash echo hello world | nc 127.0.0.1 40000
#DockerfileB
FROM debian:sid
RUN /bin/bash -c "apt-get update && apt-get install -y netcat"
EXPOSE 40000
CMD /bin/bash nc -l 40000 | nc 127.0.0.1 50000
#my_pod.yml
apiVersion: v1
kind: Pod
metadata:
name: netcat
labels:
app: netcat
spec:
containers:
- name: my_container_a
image: my_image_a:1
- name: my_container_b
image: my_image_b:1
ports:
- containerPort: 40000
#my_service.yml
apiVersion: v1
kind: Service
metadata:
name: netcat-service
spec:
ports:
- port: 50000
targetPort: 50000
protocol: TCP
selector:
app: netcat
实际上我希望containerA通过netcat“hello world”发送到containerB,而containerB将它转发给主机。
但是当我创建pod时,我收到了以下警告(kubectl describe pod netcat):
警告FailedSync错误同步窗格,跳过:[失败 使用CrashLoopBackOff为“my_container_a”创建“StartContainer”:“Back-off 10s 重启失败的容器= my_container_a pod = netcat_default(f141c598-1439-11e6-83fc-009c028bec97)“,未能 使用CrashLoopBackOff为“my_container_b”创建“StartContainer”:“Back-off 10s 重启失败的容器= my_container_b 荚= netcat_default(f141c598-1439-11e6-83fc-009c028bec97)“
文件中有错误吗?
我是否需要netcat-service使用netcat监听主机上的“hello world”消息,还是不必要?
在哪个地址:端口我应该在主机上使用netcat / curl吗?
谢谢!
答案 0 :(得分:0)
以下泊坞窗文件可在我的机器上运行:
#Dockerfile A
FROM debian:sid
RUN /bin/bash -c "apt-get update && apt-get install -y netcat"
CMD sleep 10 && echo hello world | nc 127.0.0.1 40000
#Dockerfile B
FROM debian:sid
RUN /bin/bash -c "apt-get update && apt-get install -y netcat"
CMD nc -l -p 40000 | nc <your_host_ip> 50000
我认为你不需要服务。我刚刚在主机上打开了一个终端并运行了“nc -l 50000”。你的pod.yaml是正确的。
关于“警告FailedSync错误同步窗格”错误消息,这似乎正常。每当容器终止时我都会看到此消息。在您的情况下,两个容器都被终止,因为命令失败。
如果您还不知道,可以使用“kubectl exec netcat -c mycontainera -i -t - bash -il”进入容器并尝试命令。