Kubernetes - 如何从“内部负载均衡器”切换到“入口控制器”

时间:2021-02-08 23:45:06

标签: azure kubernetes kubernetes-ingress azure-aks

我们在 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

1 个答案:

答案 0 :(得分:0)

您分享的文章是创建 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。对于前 azure nginx:https://kubernetes.github.io/ingress-nginx/deploy/#azure 控制器可能/可能不会创建一个名为 ingress 的命名空间,完全取决于他们的配置(minikube ingresss 是一个简单的插件)并且会在没有太多手动干预的情况下自行启动 pod。如果需要,您可以根据需要修改配置映射。
  • 一旦控制器启动并运行,请为其编写 Ingress 资源以选择路由规则。

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