Kubernetes无法访问暴露的服务

yhuiod9q  于 2023-05-16  发布在  Kubernetes
关注(0)|答案(3)|浏览(150)

**Kubernetes版本:**v1.10.3
**Docker版本:**17.03.2-ce
**操作系统及内核:**Centos 7
复制步骤:https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/
结果:

[root@rd07 rd]# kubectl describe services example-service
Name:wow gold
命名空间:default
Labels:Linux,Linux
注解:
选择器:run=load-balancer-example
类型:节点端口
网址:http:10.108.214.162
端口:9090/TCP
目标端口:9090/TCP
节点端口:31105/TCP
终点:192.168.1.23:9090,192.168.1.24:9090
会话关联性:无
外部交通政策:集群
活动:

预期:

期望能够curl kubernetes服务中定义的集群ip
我不太确定哪个是所谓的“public-node-ip”,所以我尝试了每个相关的IP地址,只有当使用主IP作为“public-node-ip”时,它显示“No route to host”。
我使用“netstat”来检查端点是否被监听。
我试着用“https://github.com/rancher/rancher/issues/6139“来刷新我的iptables,但它根本不起作用。
我尝试了“https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/“,“nslookup hostnames.default”不起作用。
服务似乎工作得很好,但服务仍然无法访问。
我用的是“印花布”,“法兰绒”也试过了。
我尝试了很多应用服务的教程,它们都无法访问。
我是Kubernetes的新手,请大家帮助我。

xggvc2p6

xggvc2p61#

如果你在任何公共云上,你不应该在ip a命令中获取公共IP地址。但即使端口将暴露给0.0.0.0:31105
以下是您可以验证配置的示例文件:

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: app-name
  name: bss
  namespace: default
spec:
  externalIPs:
  - 172.16.2.2
  - 172.16.2.3
  - 172.16.2.4
  externalTrafficPolicy: Cluster
  ports:
  - port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    k8s-app: bss
  sessionAffinity: ClientIP
  type: LoadBalancer
status:
  loadBalancer: {}

只需将您的<private-ip>替换为externalIPs:,并使用您的节点端口 curl 您的公共IP。
如果您正在使用任何云部署应用程序,还需要验证来自云安全组/防火墙的配置以打开端口。
希望这能有所帮助。
谢谢你!

fcipmucu

fcipmucu2#

我的k8s集群是1个主节点和1个节点。
服务Pod正在节点上运行。
所以我使用了http://nodeip:31105,它显示“Hello Kubernetes!“.
但是http://masterip:31105仍然不工作,它应该是正确的吗?
我检查了端点侦听,31105在主服务器上侦听。

qv7cva1a

qv7cva1a3#

使用此命令:

kubectl get service

如果您的服务“TYPE”是“NodePort”,“EXTERNAL-IP”列是“none”,那么您可以从URL访问或 curl 您的服务:http://<localmachine_ip>:<port_no>
端口号也可在PORT(S)列中的命令kubectl get service的结果中获得。例如,如果PORT(S)的值为1000:31918/TCP,则端口号为31918
如果服务类型为ClusterIP,则首先使用命令kubectl delete service <servie_name>删除服务,然后使用以下命令:

kubectl expose deployment <deployment_name> --type=NodePort --port=80

此命令将启动TYPE = NodePort的服务
注意:您必须公开部署。我想你知道K8的部署。

相关问题