Kubernetes 服务未获取外部 IP

Ill*_*dan 5 kubernetes

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

当我将服务公开为 NodePort 时,我无法接收外部 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
Run Code Online (Sandbox Code Playgroud)

环境细节:

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"}
Run Code Online (Sandbox Code Playgroud)

在 vSphere VM(本地)上运行 Ubuntu Server 16.04。

小智 9

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

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

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

最简单的方法来查看这个使用

kubectl describe service <service-name>
Run Code Online (Sandbox Code Playgroud)

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

稍后使用获取集群中任何节点的任何节点 Ip

kubectl get nodes -o wide
Run Code Online (Sandbox Code Playgroud)

您现在可以使用外部访问您的服务 <Node-IP>:<Node-Port>

另外,如果你想要一个固定的 Node 端口,你可以在 yaml 中指定它。

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


Ant*_*nko 5

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

\n

来自文档

\n
\n

如果将 type 字段设置为“NodePort”,Kubernetes master 将从标志配置的范围(默认:30000-32767)分配一个端口,并且每个节点都会将该端口(每个节点上的相同端口号)代理到您的服务。该端口将在您的 Service\xe2\x80\x99s spec.ports[*].nodePort 字段中报告。

\n
\n

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

\n

  • 根据文档:“EXTERNAL-IP 列中的 IP 地址是公共互联网上可用的地址。CLUSTER-IP 仅在集群/私有云网络内部可用。” ...“对于应用程序的某些部分,您可能希望将服务公开到外部 IP 地址。Kubernetes 支持两种方法:NodePorts 和 LoadBalancers。” 摘自:https://kubernetes.io/docs/concepts/services-networking/connect-applications-service#exusing-the-service (3认同)