Kubernetes服务未获取外部IP

Kubernetes服务未获取外部IP,kubernetes,Kubernetes,我在本地运行Kubernetes集群,使用KubeAdm初始化。我配置了网络插件 当我将服务公开为节点端口时,我无法接收外部IP。我错过了什么 我的部署yaml如下所示: apiVersion: v1 kind: Service metadata: name: testapp labels: run: testapp spec: type: NodePort ports: - port: 8080 targetPort: 80 protocol: T

我在本地运行Kubernetes集群,使用KubeAdm初始化。我配置了网络插件

当我将服务公开为节点端口时,我无法接收外部IP。我错过了什么

我的部署yaml如下所示:

apiVersion: v1
kind: Service
metadata:
  name: testapp
  labels:
    run: testapp
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    protocol: TCP
    name: https
  selector:
    run: testapp
---------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: testapp
spec:
  selector:
    matchLabels:
      run: testapp
  replicas: 2
  template:
    metadata:
      name: testapp
      labels:
        run: testapp
    spec:
      containers:
        - image: [omitted]
          name: testapp
          ports:
          - containerPort: 80
             livenessProbe:
               httpGet:
               path: /api/health
               port: 80
环境详细信息:

Kubernetes版本:

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T12:22:21Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T11:55:20Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
在vSphere VM上运行Ubuntu Server 16.04(在prem上)。

如果使用节点端口,您将不会在此处看到“外部IP”值

发件人:

如果将类型字段设置为“NodePort”,Kubernetes主机将从标志配置范围(默认值:30000-32767)分配一个端口,每个节点将代理该端口(每个节点上相同的端口号)到您的服务中。该端口将在服务的spec.ports[*].nodePort字段中报告


所以,你没有一个IP可以显示在那里。您可以将任何节点连接到定义的节点端口。

将服务公开为节点端口时,您将无法获得外部IP。在Nodeport上公开服务意味着您的服务将通过群集中任意节点的NodeIP在30000-32767(默认行为)之间的随机端口在外部可用

在您的情况下,服务公开的端口是端口31727

集群代理中的每个节点将该端口(每个节点上的端口号相同)插入启动服务的pod

使用

kubectl describe service <service-name>
您现在可以使用

此外,如果需要固定节点端口,可以在yaml中指定该端口


PS:只需确保在节点上添加安全规则,以允许特定端口上的流量。

根据文档:“EXTERNAL-IP列中的IP地址是公共internet上可用的IP地址。CLUSTER-IP仅在群集/私有云网络中可用。”。。。“对于应用程序的某些部分,您可能希望将服务公开到外部IP地址。Kubernetes支持两种方法:节点报告和负载平衡器。”摘自:等等?当您使用LoadBalancer模式而不是NodePort时,您将看到外部IP。在NodePort中,您的服务没有专用的外部IP,所有节点都将处理与服务的连接。
kubectl get nodes -o wide