在 minikube 中不工作的服务上暴露的 pod 的最小连接测试

minimal connectivity test for a pod exposed on service not working in minikube

我使用的是minikube版本:v1.25.1,win10,k8s版本1.22

有 1 个节点,上面有 2 个 pods:mainfront,1 个服务 - svc-main.

我正在尝试执行到前面并通过服务调用主服务,并看到一些确认连接正常的消息。

main.yaml:

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: main
  name: main
  namespace: default
spec:
  containers:
    - name: main
      image: nginx
      command: ["/bin/sh","-c"]
      args: ["while true; do echo date; sleep 2; done"]

front.yaml:

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: front
  name: front
spec:
  containers:
  - image: nginx
    name: front
    command:
    - /bin/sh
    - -c
    - while true; echo date; sleep 2; done

服务是这样创建的:

k expose pod ngin --name=svc-main --type=ClusterIP --port=80 --target-port=80

k get svc
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc-main     ClusterIP 10.104.26.249   <none>        80:31775/TCP   11m

当我尝试从前面卷曲时,它说“无法解析主机:svc-main”

 k exec front -it -- sh
 curl svc-main:80

或这个

curl http://svc-main:80

curl 10.104.26.249:80

我试了31775端口,结果一样。我做错了什么?!

问题是当您使用 yaml 文件创建 Kubernetes pod 时,您正在使用自定义命令和参数覆盖 nginx docker 映像中定义的默认入口点和 Cmd:

command: ["/bin/sh","-c"]
args: ["while true; do echo date; sleep 2; done"]

这就是 nginx 网络服务器在创建后无法工作的原因 pods。 您应该删除这些行,删除 运行 pods,并创建新的 pods。之后,您将可以通过运行

访问nginx网页
# curl svc-main

在你的前舱内。

您可以阅读有关为 Pod 中的容器定义命令和参数的更多信息here

还有一篇关于 Docker CMD 和入口点的好文章 here