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 描述服务示例-服务
名称:示例服务
命名空间:默认
标签:run=负载均衡器示例
注释:
选择器:run=load-balancer-example
类型:节点端口
IP: 10.108.214.162
端口:9090/TCP
目标端口:9090/TCP
节点端口:31105/TCP
端点:192.168.1.23:9090,192.168.1.24:9090
会话亲和力:无
外部流量策略:集群
活动:
预计:
期望能够curl kubernetes服务中定义的集群ip
我不太确定哪个是所谓的“公共节点IP”,所以我尝试了每个相关的IP地址,只有当使用主IP作为“公共节点IP”时,它显示“没有到主机的路由” ”.
我使用“netstat”来检查端点是否被监听。
我尝试“https://github.com/rancher/rancher/issues/6139”来刷新我的iptables,但它根本不起作用。
我尝试了“https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/”,“nslookup hostnames.default”不起作用。
服务看起来工作得很好,但服务仍然无法访问。
我正在使用“印花布”,也尝试过“法兰绒”。
我尝试了很多应用服务的教程,都无法访问。
我是 kubernetes 新手,请帮助我。
如果您在任何公共云上,则不应通过
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:
并使用您的节点端口来卷曲您的公共 IP。
如果您使用任何云来部署应用程序,还要验证云安全组/防火墙的配置以打开端口。
希望这会有所帮助。
谢谢!
我的k8s集群是1个master和1个节点。
服务 Pod 正在节点上运行。
所以我使用了http://nodeip:31105,它显示“Hello Kubernetes!”。
但是 http://masterip:31105 仍然无法正常工作,这应该是正确的吗?
我检查了端点监听,31105在master上监听。
使用此命令:
kubectl get service
如果您的服务“TYPE”是“NodePort”并且“EXTERNAL-IP”列是“none”,那么您可以从以下 URL 访问或卷曲您的服务:
http://<localmachine_ip>:<port_no>
端口号也可在
kubectl get service
列中命令 PORT(S)
的结果中找到。
例如,如果 PORT(S)
的值为 1000:31918/TCP
,则端口号为 31918
。
如果服务类型为
ClusterIP
,则首先使用命令 kubectl delete service <servie_name>
删除服务,然后使用以下命令:
kubectl expose deployment <deployment_name> --type=NodePort --port=80
此命令将启动
TYPE
= NodePort
的服务
注意:您必须公开部署。我假设您了解 K8s 中的部署。
使用入口或端口转发。