Kubernetes服务没有获得外部IP

时间:2018-03-19 06:11:38

标签: kubernetes

我在内部运行Kubernetes集群,使用KubeAdm进行初始化。我配置了flannel网络插件。

当我将服务作为NodePort公开时,我无法接收外部IP。我错过了什么?

enter image description here

我的部署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(本地)。

2 个答案:

答案 0 :(得分:2)

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

在您的情况下,您的服务所在的端口是端口31727.

群集中的每个节点都将该端口(每个节点上的相同端口号)代理到启动服务的窗格中。

使用

查看此内容的最简单方法
kubectl describe service <service-name>

在上面的结果中检查Nodeport的详细信息。

稍后使用

获取群集中任何节点的任何节点Ip
kubectl get nodes -o wide

您现在可以使用<Node-IP>:<Node-Port>

从外部访问您的服务

此外,如果您需要固定的Node端口,可以在yaml中指定。

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

答案 1 :(得分:-1)

你不会看到&#34;外部IP&#34;如果您使用节点端口,则此处为值。

来自documentation

  

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

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