Kubernetes,无法访问公开的服务

时间:2018-06-12 09:29:57

标签: kubernetes

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

姓名:示例服务
命名空间:默认
标签:run = load-balancer-example
注释:
选择器:run = load-balancer-example
类型:NodePort
IP:10.108.214.162
港口:9090 / TCP
TargetPort:9090 / TCP
NodePort:31105 / TCP
终点:192.168.1.23:9090,192.168.1.24:9090
会话亲和力:无 外部交通政策:集群 事件:

预期:

期望能够卷曲kubernetes服务中定义的集群ip

我不确定哪个是所谓的" public-node-ip",所以我尝试了每个相关的ip地址,只有当使用主ip作为" public时-node-IP"它显示"没有主持人的路线"。

我用过" netstat"检查端点是否被监听。

我试过" https://github.com/rancher/rancher/issues/6139"冲洗我的iptables,它根本不起作用。

我试过" https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/"," nslookup hostnames.default"没有用。

服务似乎运行得很好,但仍然无法访问服务。

我正在使用" calico"和法兰绒"也试过了。

我尝试了很多应用服务的教程,但都无法访问它们。

我是kubernetes的新手,如果有人可以帮助我,那就好了。

2 个答案:

答案 0 :(得分:1)

如果您在任何公共云上,则不应在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。

如果您使用任何云部署应用程序,还要验证来自云安全组/防火墙的配置以打开端口。

希望这可能会有所帮助。

谢谢!

答案 1 :(得分:0)

我的k8s群集是1个主节点和1个节点 服务pod正在节点上运行 所以我使用了http://nodeip:31105,它显示了“Hello Kubernetes!” 但是http://masterip:31105仍然不起作用,它是否正确? 我检查了端点监听,31105是在主人上听的。