![](/img/trans.png)
[英](Kubernetes + Minikube) can't get docker image from local registry
[英]Can't get UDP packets to my container in kubernetes [MiniKube]
我是 Kubernetes 的新手,但我设法为自己构建了一个直接在 Docker 下完美运行的容器,并且似乎在 k8s 部署中运行良好。
该容器是安装在 Ubuntu 上的 github 的几个 UDP 数据包复制器的实现。
当它直接在我的机器上的 Docker 下运行时,我可以将 UDP 数据包发送到容器并将它们复制回我机器上的不同端口,以证明复制有效。 (使用netcat
发送和接收数据包)。
但是,我认为我在 k8s 网络方面遗漏了一些东西。
我在我的机器上使用 MiniKube,并且我使用以下 k8s 清单来创建仅包含一个容器的部署。
apiVersion: apps/v1
kind: Deployment
metadata:
name: samplicator-deployment
labels:
app: samplicator
spec:
replicas: 1
selector:
matchLabels:
app: samplicator
template:
metadata:
labels:
app: samplicator
spec:
containers:
- name: samplicator-container-01
image: dgbes/udp-fan-out-tools:latest
command: ["samplicate"]
args: ["-p3160","192.168.1.159/3161","192.168.1.159/3162"]
ports:
- name: receiver
protocol: UDP
containerPort: 3160
然后我使用以下命令创建部署: kubectl apply -f create-samplicator-deployment.yaml
然后,我使用nc -ulk -p 3161
和nc -ulk -p 3162
在我的主机上使用netcat
设置了几个 UDP 侦听器。
如果然后我使用kubectl exec --stdin --tty samplicator-deployment-{randomPodName} -- /bin/bash
连接到正在运行的容器并手动使用netcat
将数据包发送到我的主机,我可以看到那些到达没有问题。
我使用kubectl get pod -o wide
找到容器/pod IP 地址。
但是,当我尝试将数据包发送到 pod 中的采样器进程时,我没有看到任何内容返回到我的主机。
因此,我随后在容器/pod 中生成了一个 shell,检查了采样器进程是否正常运行(确实如此),并在容器实例中安装了netcat
。
使用netcat -u {my host machine IP} 3161
我可以将数据包从容器发送到我的主机 machien 并且它们被接收没有问题。
因此,似乎问题在于将数据包发送到容器。
我通过在容器 shell 中运行nc -ulk -p 3600
并将数据包从我的主机发送到容器中的该端口来确认这一点 - 容器中没有收到任何内容。
我知道端口需要在容器上公开,并且为此使用了“服务”,但我认为这就是部署模板规范中的ports:
部分正在做的事情。
这并没有创建服务来公开端口,因此我在部署清单 YAML 的末尾添加了一个服务定义,如下所示:
---
apiVersion: v1
kind: Service
metadata:
name: samplicator-service
spec:
selector:
app: samplicator
type: LoadBalancer
ports:
- name: receiver-service
protocol: UDP
port: 3160
targetPort: 3160
我显然在这里遗漏了一些东西,如果我的 k8s 术语有点混乱,我深表歉意 - 正如我所说我对 k8s 完全陌生。
有关如何正确使 UDP 端口可访问的任何指针?
我想到了...
Service type=LoadBalancer
不适用于 MiniKube,因为它显然依赖于外部云服务。
我注意到我的服务位于未分配的pending
中,而ExternalIP
从未被分配,这使我得到了这个答案。
神奇的是在单独的终端 window 中简单地运行以下命令,然后允许将外部 IP 分配给服务。
minkube tunnel
一旦运行并分配了ExternalIP
,向该 ExternalIP 发送数据包就可以完美运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.