如何解决为什么我的 ClusterIP 不能与分配的 ip 一起使用?
我用 ClusterIP 定义了一个新服务。
[ciuffoly@master-node ~]$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d1h
test-reg ClusterIP 10.102.196.35 <none> 5000/TCP 58m
test-web LoadBalancer 10.108.151.13 192.168.1.125 80:30001/TCP 73m
pod 正在 worker-node1 上运行,我可以通过以太网 ip 上的 worker-node1 连接到该服务器。
[ciuffoly@worker-node1 ~]$ ip addr show|grep "192\.168\.1\."
inet 192.168.1.20/24 brd 192.168.1.255 scope global noprefixroute ens33
[ciuffoly@worker-node1 ~]$ telnet 192.168.1.20 5000
Connected to 192.168.1.20.
Escape character is '^]'.
^]
telnet> q
[ciuffoly@master-node ~]$ telnet 192.168.1.20 5000
Connected to 192.168.1.20.
Escape character is '^]'.
^]
telnet> q
但是我无法使用 ClusterIP 连接到此服务
[ciuffoly@master-node ~]$ telnet 10.102.196.35 5000
Trying 10.102.196.35...
^C
按照答案,我也测试了 NodePort,但我仍然遇到同样的问题。
[ciuffoly@master-node ~]$ kubectl get services|grep reg
test-reg NodePort 10.111.117.116 <none> 5000:30030/TCP 5m41s
[ciuffoly@master-node ~]$ kubectl delete svc test-reg
service "test-reg" deleted
[ciuffoly@master-node ~]$ netstat -an|grep 30030
[ciuffoly@master-node ~]$ kubectl apply -f myreg.yaml
myreg.yamldeployment.apps/test-reg unchanged
service/test-reg created
[ciuffoly@master-node ~]$ netstat -an|grep 30030
tcp 0 0 0.0.0.0:30030 0.0.0.0:* LISTEN
这不起作用
[ciuffoly@master-node ~]$ telnet master-node 30030
Trying 192.168.1.10...
^C
这有效
[ciuffoly@master-node ~]$ telnet worker-node1 30030
Trying 192.168.1.20...
Connected to worker-node1.
Escape character is '^]'.
^]
telnet> q
Connection closed.
解决方法
这是为了更好的可见性而发布的社区 wiki 答案。随意扩展它。
正如 andrea ciuffoli 所证实的那样,从法兰绒换成印花布解决了这个问题。
Flannel 是一个满足 Kubernetes 要求的非常简单的覆盖网络。
另一方面,Calico 是一种开源网络和网络安全解决方案,适用于容器、虚拟机和基于主机的本机工作负载。 Calico 支持多个数据平面,包括:纯 Linux eBPF 数据平面、标准 Linux 网络数据平面和 Windows HNS 数据平面。 Calico 提供完整的网络堆栈,但也可与 cloud provider CNIs 结合使用以提供网络政策实施。
很难说最终解决方案背后的唯一原因是什么,但您可以找到有关 Comparing Kubernetes CNI Providers: Flannel,Calico,Canal,and Weave 的一些详细信息。
,来自docs:
服务类型 ClusterIP
在集群内部公开服务
知识产权。选择此值可使服务仅可从
在集群内。这是默认的 ServiceType。
因此您只能从集群内部访问您的 ClusterIP 服务。因此,您可以部署一个安装了 telnet 的 pod 并从那里测试您的设置。
如果您想从您的主机连接,您可以使用服务类型 NodePort
。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
- port: 80
targetPort: 80
nodePort: 30080
这样您就可以通过 hostname:30080
连接到服务。问题是,您可以使用集群的每个主机名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。