【问题标题】:expose private kubernetes cluster with NodePort type service使用 NodePort 类型服务公开私有 kubernetes 集群
【发布时间】:2019-11-13 04:40:27
【问题描述】:

我在 GKE 上创建了一个 VPC 原生集群,在其上禁用了主授权网络。 我认为我做的一切都是正确的,但我仍然无法从外部访问该应用程序。

下面是我的服务清单。

apiVersion: v1
kind: Service
metadata:
    annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.16.0 (0c01309)
    creationTimestamp: null
    labels:
        io.kompose.service: app
    name: app
spec:
    ports:
        - name: '3000'
          port: 80
          targetPort: 3000
          protocol: TCP
          nodePort: 30382
    selector:
        io.kompose.service: app
    type: NodePort

应用程序的容器端口是3000,我从日志中检查了它是否正常工作。 我也添加了防火墙以在我的 vpc 网络中打开30382port。 我仍然无法访问具有指定 nodePort 的节点。 我有什么遗漏吗?


kubectl 获取 ep

NAME         ENDPOINTS          AGE
app          10.20.0.10:3000    6h17m
kubernetes   34.69.50.167:443   29h

kubectl 获取 svc

NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
app          NodePort    10.24.6.14   <none>        80:30382/TCP   6h25m
kubernetes   ClusterIP   10.24.0.1    <none>        443/TCP        29h

【问题讨论】:

  • 你检查选择器标签是否匹配?
  • 分享 kubectl get ep 的输出
  • 也从 kubectl get svc
  • @JMadushan,选择器标签匹配,因此它适用于公共集群和LoadBalaner 类型的服务。 @PEkambaram,kubectl get ep 的结果:名称端点年龄应用程序 10.20.0.10:3000 6h17m kubernetes 34.69.50.167:443 29h
  • @PEkambaram,我根据您的要求更新了我的问题。

标签: kubernetes google-kubernetes-engine


【解决方案1】:

在 Kubernetes 中,service 用于与 pod 通信。

要将 pod 暴露在 Kubernetes 集群之外,您需要 NodePort 类型的 k8s 服务。

NodePort 设置适用于 Kubernetes 服务。默认情况下,Kubernetes 服务可以通过 ClusterIP 访问,这是一个 internal IP 地址,只能从 Kubernetes 集群内部访问。 ClusterIP 使运行在 pod 中的应用程序能够访问该服务。为了使服务可以从集群外部访问,用户可以创建 NodePort 类型的服务。

请注意,需要将外部 IP 地址分配给集群中的其中一个节点,以及允许进入该端口的流量的防火墙规则。因此,Kubernetes 节点上的 kubeproxy(附加了外部 IP 地址)会将该端口代理到服务选择的 pod。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2021-12-21
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2021-05-06
    • 2021-05-02
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多