无法通过 envtest 的内部 IP 访问 k8s pod
No access to k8s pod by internal IP from the envtest
我使用 envtest 和本地 Minikube 集群为我的 Kubernetes 操作员编写了一个集成测试。
我正在测试的控制器正在通过 IP 地址向 pods 之一发出 http 请求。
我得到的地址是这样的:
endpoints := &corev1.Endpoints{}
client.Get(context.TODO(), types.NamespacedName{Namespace: "ns", Name: "cluster"}, endpoints)
url = fmt.Sprintf("%s:%s", endpoints.Subsets[0].Addresses[0].IP, "8081")
如果我将 Operator 部署到 Kubernetes 集群,则此代码有效。
但是当 运行 测试时我得到错误:
Post \"http://172.17.0.3:8081": dial tcp 172.17.0.3:8081: connect: no route to host
这是因为之前 http 调用是通过操作员从 pod 进行的,但现在是从 envtest 进行的?
如何正确编写控制器测试?
我的解决方法:
我使用 this 示例将端口转发到目标 pod。
为了让代码转到 localhost
我会稍微修改一下。
我使用 envtest 和本地 Minikube 集群为我的 Kubernetes 操作员编写了一个集成测试。
我正在测试的控制器正在通过 IP 地址向 pods 之一发出 http 请求。 我得到的地址是这样的:
endpoints := &corev1.Endpoints{}
client.Get(context.TODO(), types.NamespacedName{Namespace: "ns", Name: "cluster"}, endpoints)
url = fmt.Sprintf("%s:%s", endpoints.Subsets[0].Addresses[0].IP, "8081")
如果我将 Operator 部署到 Kubernetes 集群,则此代码有效。
但是当 运行 测试时我得到错误:
Post \"http://172.17.0.3:8081": dial tcp 172.17.0.3:8081: connect: no route to host
这是因为之前 http 调用是通过操作员从 pod 进行的,但现在是从 envtest 进行的?
如何正确编写控制器测试?
我的解决方法:
我使用 this 示例将端口转发到目标 pod。
为了让代码转到 localhost
我会稍微修改一下。