【问题标题】:Not able to access service from the public ip in kubernetes无法从 kubernetes 中的公共 ip 访问服务
【发布时间】:2019-07-05 12:24:38
【问题描述】:

我正在使用 kubernetes 并运行一项服务。服务正在运行并显示在服务中。但我无法从实例的公共 ip 访问它。下面是我的部署文件。

apiVersion: v1
kind: Service
metadata:
  name: apache-service
spec:
  selector:
    app: apache
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: apache-deployment
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: mobingi/ubuntu-apache2-php7:7.2
        ports:
        - containerPort: 80

这是我的服务清单。

NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
apache-service   NodePort    10.106.242.181   <none>        80:31807/TCP   9m5s
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP        11m

但是当我使用集群和节点的公共 ip 从以下 telnet 检查相同的服务时。它没有响应。

telnet public-ip:31807

任何类型的帮助都将是可观的。

【问题讨论】:

  • 这是工作 curl 10.106.242.181
  • 您是在本地(例如 Minikube、microk8s)还是在托管集群(EKS、GKE)上部署它?
  • 基本检查:如果你kubectl get pods,它是否正在运行?如果你kubectl describe service apache-service,它是否连接到吊舱?您的主机或网络是否有任何类型的防火墙设置,默认情况下会阻止连接(iptables,AWS 安全组,...)?

标签: docker kubernetes devops kubernetes-pod


【解决方案1】:

集群 IP 是什么意思?您是指充当 kunernetes 主节点的节点吗?如果您使用主 IP,它将无法正常工作。因为出于安全考虑,master 没有安排部署。

通过 nodeport 公开服务意味着该服务侦听每个工作节点中的特定端口。因此,您可以使用节点端口访问 kunernetes 工作节点并获得响应。但是,如果您使用 aws 等云提供商创建集群,则工作程序节点安全组是安全的。可能需要编辑工作节点的安全组才能访问服务。

【讨论】:

  • 问题已解决。我从节点 ip 检查并打开实例的防火墙规则。有用。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2023-03-16
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多