【问题标题】:Accessing a service via a load balancer in an AKS cluster通过 AKS 群集中的负载均衡器访问服务
【发布时间】:2018-10-31 18:31:43
【问题描述】:

我配置了一个集群,其中服务(及其关联的 pod/容器)都部署到私有子网中。其中一个 pod 代表应用程序的 UI,我已经定义了一个具有公共 ip 的负载平衡器来提供对 UI 的访问。至少这是我的意图。当我在浏览器中输入带有负载均衡器 IP 的 URL 时,请求不会发送到 UI 容器。我假设我的某些配置不正确,我们将不胜感激。 UI 服务的定义如下所示:

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata: {name: myui, namespace: gem}
    spec:
      replicas: 1
      template:
        metadata:
          labels: {app: myui}
        spec:
          containers:
            image: myblobstore.azurecr.io/myui:latest
            imagePullPolicy: Always
            name: myui
            ports:
            - {containerPort: 80}
    ---
    apiVersion: v1
    kind: Service
    metadata: {name: myapp, namespace: gem}
    spec:
      loadBalancerIP: 40.123.124.125
      ports:
      - {name: '80', port: 80}
      selector: {app: myui}
      type: LoadBalancer

我还在我的网络安全组中定义了一个规则,我打算允许来自负载平衡器的流量到达目标容器:

    65001    AzureLoadBalancerInBound   Any  Any  AzureLoadBalancer  Any  Allow

但流量并没有到达 UI 容器。我需要什么额外的配置才能让它工作?

更新:这里是我的集群的端点:

$ kubectl get endpoints -n gem
NAME                ENDPOINTS                       AGE
...
myui                10.0.2.22:80                    176m
...

为了完成图片,这里有一些附加信息:

$ kubectl get pods -n gem -o wide
NAME                                 READY   STATUS             RESTARTS   AGE    IP          NODE                  NOMINATED NODE
...
myui-99c55f8d4-2thzv                 1/1     Running            0          ...

$ kubectl get svc -n gem -o wide
NAME                TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)             AGE    SELECTOR
...
myui                LoadBalancer   10.1.0.94    40.123.124.125  80:32246/TCP        3h1m   app=myui
...

$ kubectl describe svc/myui -n gem
Name:                     myui
Namespace:                gem
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"myui","namespace":"gem"},"spec":{"loadBalancerIP":"40.123.124,125"...
Selector:                 app=myui
Type:                     LoadBalancer
IP:                       10.1.0.94
IP:                       40.123.124.125
LoadBalancer Ingress:     40.123.124.125
Port:                     80  80/TCP
TargetPort:               80/TCP
NodePort:                 80  32246/TCP
Endpoints:                10.0.2.22:80
Session Affinity:         None
External Traffic Policy:  Cluster

彼得

【问题讨论】:

  • 你能粘贴kubectl get endpoints的输出吗?
  • 完成。我还包含了 ui 应用程序的 pod 和服务信息。
  • 我很确定是否有一个端点应该可以工作......并且您的服务定义看起来不错。如果您从集群中点击服务端点(使用 curl 或其他东西),它会起作用吗?直接用 curl 打 pod 有效果吗?
  • 您是否使用高级网络。在我的情况下,我也使用了高级网络,并且创建 LB 的方式非常奇怪。即使我选择任何随机 IP,Azure 也没有发出健康警报。BB 我在 azure 中使用 k8s 1.9.3
  • 是的,它在集群中运行良好。事实上,我在公共子网上有一个 vm,可以创建一个 ssh 隧道到 myui pod,例如允许我连接到 localhost:8080。所以我知道 UI 应用程序已启动并运行良好。

标签: azure azure-aks


【解决方案1】:

最后,解决方案只是确保正在使用的网络安全组开放了端口 80 和 443 以允许互联网流量流动。我有两个不同的安全组,并认为我的负载均衡器会使用我指定为“公共”安全组的那个,它确实打开了端口 80 和 443。它改为使用我的另一个安全组,我必须向该组添加适当的规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多