【问题标题】:Kubernetes - how to switch from "internal Load Balancer" to "ingress controller"Kubernetes - 如何从“内部负载均衡器”切换到“入口控制器”
【发布时间】:2021-05-12 14:41:43
【问题描述】:

我们在 Azure Kubernetes 服务中部署了我们的应用、Pod 和服务,但我们无法从另一个虚拟网络的 VM 连接到我们的容器应用。与 AKS Pod 相比,当我们想要从另一个虚拟网络/子网的 Azure 资源 (VM) 建立网络连接时,似乎服务类型内部负载均衡器无法用于这些目的。 我阅读了文档https://docs.microsoft.com/en-us/azure/aks/ingress-internal-ip,但我仍然很困惑如何修改我的 YAML 定义以便使用“Ingress-Controller with type Internal LB”部署我们的应用程序。 你能帮我如何修改 YAML 吗?我真的需要用 Helm 安装一些东西吗(我以前从未使用过它)以及需要从哪里安装它。如果可能的话,我想避免这种情况。我不理解文档中描述的概念。 对于我们来说,我认为如果我们在同一个命名空间中有入口控制器是可以的。

谢谢!

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fa-ads-deployment
  labels:
    app: fa-ads-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: frontarena-ads-aks-test
      labels:
        app: frontarena-ads-aks-test
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      restartPolicy: Always
      containers:
      - name: frontarena-ads-aks-test
        image: faselect.dev/frontarena/ads:test1
        ports:
          - containerPort: 9000
  selector:
    matchLabels:
      app: frontarena-ads-aks-test
---
apiVersion: v1
kind: Service
metadata:
  name: frontarena-ads-aks-test
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 9000
  selector:
    app: frontarena-ads-aks-test

【问题讨论】:

    标签: azure kubernetes kubernetes-ingress azure-aks


    【解决方案1】:

    您分享的文章是创建 Ingress 控制器和资源。 Ingress 控制器不会随集群自动启动,它们充当反向代理和负载均衡器,并监视来自所有命名空间的 Ingress 对象。使用此页面选择最适合您的集群的入口控制器实现。每个人都有自己的配置。 https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/.

    一旦控制器开始观察入口流量,我们需要定义称为入口资源的路由规则,您将在其中定义路由规则,例如,在下面,如果用户导航到 test.com /icons 然后将调用服务测试。您不一定要定义主机。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-resource-backend
    spec:
      rules:
        - host: test.com
          http:
            paths:
              - path: /icons
                pathType: ImplementationSpecific
                backend:
                  service:
                       name: test
                       port:
                         number: 9999
    

    您可以使用以下命令检查您的入口资源。

    kubectl get ingress 
    root@ip-172-31-54-44:/home/ubuntu# k get ingress -n logiq 
    NAME                      CLASS    HOSTS           ADDRESS     PORTS   AGE
    ingress-resource-backend   public   test.com       127.0.0.1   80      1d
    
    

    总结:

    • 选择适合您项目的入口控制器,您无需安装 helm。直接去git项目,下载项目,运行kubectl apply -f。对于前天蓝色 nginx:https://kubernetes.github.io/ingress-nginx/deploy/#azure 控制器可能/可能不会创建名为 ingress 的命名空间,这完全取决于它们的配置(minikube ingresss 是一个简单的插件),并且会自行启动 Pod,而无需太多手动干预。如果需要,您可以根据需要修改配置映射。
    • 控制器启动并运行后,为其编写一个 Ingress 资源以选择路由规则。

    如果您仍有疑问,这里有详细的视频。 https://www.youtube.com/watch?v=u948CURLDJA

    【讨论】:

    • 您好,谢谢,很好的解释,但是如果我们的入口仅像您的示例中那样在端口 80 上运行/接受流量,那么您指定为服务端口的端口 9999 的用途是什么?请提供更多详细信息,因为我认为这让我们很多人感到困惑
    • @AndreyDonald 我本可以在 80 上公开服务,但我宁愿给出一个 Nodeport 服务的示例,它可以从我的一个实现中 (9999:30741)。 Ingress 在 80 上接受流量,但它会根据 ingress 资源中的路径定义进行路由并调用服务。 matthewpalmer.net/kubernetes-app-developer/articles/…
    【解决方案2】:

    与 AKS Pod 相比,当我们想要从另一个虚拟网络/子网的 Azure 资源 (VM) 建立网络连接时,似乎服务类型内部负载均衡器无法用于这些目的。

    想更新一下这个^

    我能够从另一个 Azure VNet 连接到内部 LoadBalancer svc(VNet 已建立 Vnet 对等互连)。

    我刚刚按照https://docs.microsoft.com/en-us/azure/aks/internal-lb#create-an-internal-load-balancer 中的说明创建了 SVC。获取 ILB 的 IP 地址(来自部署 AKS 群集的 VNet 的 IP)。 然后我能够从部署到另一个 Vnet(与第一个 Vnet 对等)的另一个 AKS 集群中的 POD 进行 HTTP 调用

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2018-12-28
      • 2019-06-28
      • 2021-01-14
      • 2020-07-29
      • 1970-01-01
      • 2019-08-05
      • 2019-08-15
      • 1970-01-01
      相关资源
      最近更新 更多