【问题标题】:access azure kubernetes cluster using a NodePort使用 NodePort 访问 azure kubernetes 集群
【发布时间】:2019-07-25 12:12:27
【问题描述】:

我正在运行一个 pod(网站)和一个简单的服务

apiVersion: v1
kind: Service
metadata:
  name: ui
spec:
  type: NodePort
  selector:
    app: ui
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000

$> kubectl get services
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE   SELECTOR   LABELS
kubernetes   ClusterIP   10.0.0.1      <none>        443/TCP        83m   <none>     component=apiserver,provider=kubernetes
ui           NodePort    10.0.25.205   <none>        80:30180/TCP   53m   app=ui     <none>

因为此服务的类型为NodePort,它会在每个集群节点上打开一个端口。就我而言,我在 Azure 中运行 kubernetes,单节点设置。但是如何访问我的服务/网站?

$> kubectl describe service ui
Name:                     ui
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata": {"annotations":{},"name":"ui","namespace":"default"},"spec":{"ports":[{"port":80,"protocol"...
Selector:                 app=ui
Type:                     NodePort
IP:                       10.0.25.205
Port:                     <unset>  80/TCP
TargetPort:               3000/TCP
NodePort:                 <unset>  30180/TCP
Endpoints:                10.244.0.14:3000,10.244.0.15:3000
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  Type                  29m   service-controller  NodePort -> LoadBalancer
  Normal  EnsuringLoadBalancer  29m   service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   27m   service-controller  Ensured load balancer
  Normal  Type                  10m   service-controller  LoadBalancer -> NodePort
  Normal  DeletingLoadBalancer  10m   service-controller  Deleting load balancer
  Normal  DeletedLoadBalancer   9m5s  service-controller  Deleted load balancer

我没有看到外部 IP。

例如,如果我将NodePort 更改为LoadBalancer,我获得了一个外部 IP,我可以访问我的网站,但是如何使用 NodePort 来做到这一点?

【问题讨论】:

    标签: azure kubernetes azure-aks


    【解决方案1】:

    据我所知,AKS 是一项托管服务,它只是公开同样由 Azure 管理的主服务器来控制所有操作。从节点默认不暴露,也没有外部IP。

    在 AKS 集群中,您只能通过带有负载均衡器的服务或入口(也使用负载均衡器为其服务)访问应用程序。

    如果你真的想为你的服务使用节点类型,也有办法解决。您可以手动创建公共 IP 并将它们关联到要创建具有节点类型的服务的节点。然后节点具有外部 IP。但不建议对 AKS Iaas 进行所有操作。因此,如果您想从 Internet 访问服务,负载均衡器类型是最合适的方式。

    【讨论】:

      【解决方案2】:

      您可以通过从 kubernetes api 中查询节点来获取节点的 IP:

      kubectl get nodes -o wide
      

      它将打印每个节点的IP。 由于 NodePort 暴露在所有节点上,因此您可以使用任何节点访问服务。

      【讨论】:

      • 当我运行该命令时,外部 IP 为 &lt;none&gt;: STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME --> Ready agent 175m v1.13.7 10.240.0.4 Ubuntu 16.04.6 LTS 4.15.0-1143-azure docker://3.0.6。也许 Azure 不公开 NodePorts?!
      • 确实,这是 Azure Kubernetes 实现的一种特殊情况:节点本身没有暴露在互联网上,您需要使用负载均衡器来暴露您的入口服务。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2018-10-29
      • 2018-10-27
      • 2019-06-05
      • 2019-03-21
      相关资源
      最近更新 更多