使用NodePort类型服务公开私有kubernetes集群

时间:2019-11-13 04:40:27

标签: kubernetes google-kubernetes-engine

我在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网络中打开30382端口。 我仍然无法访问具有指定nodePort的节点。 我有什么想念吗?


kubectl get ep

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

kubectl get 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

1 个答案:

答案 0 :(得分:3)

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

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

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

请注意,需要为群集中的一个节点分配外部 IP地址,并需要允许进入该端口的流量的防火墙规则。结果,Kubernetes节点上的kubeproxy(连接了外部IP地址)会将该端口代理到服务选择的Pod。