首页 > 解决方案 > 用于不同端口的 LoadBalancer Kuberenets

问题描述

我有 6 个 Pod,每个 Pod 应用程序从不同的端口监听,每个 Pod 都有自己的 IP 地址。

我有定义静态 IP 地址的 Kubernetes LoadBalancer 服务 (Azure LoadBalancer)。

我可以使用 LoadBalancer IP 10.1.1.100 和端口号 9111 访问 app1 应用程序(应用程序 1 从 9111 端口侦听)

现在我有从端口 9112 侦听的 app2,是否有可能,我可以访问相同的 Loader Balancer IP,即 10.1.1.100 和 9112。如果是。如何实施服务

我目前的服务最多的文件

apiVersion: v1
kind: Service
metadata:
  name: "app1-service"
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  selector:
    app: app1
  type: LoadBalancer
  loadBalancerIP: 10.1.1.100
  ports:
    - port: 9111

app1 部署文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "app1-deployment"
  labels:
    app: app1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app1
  template:
    metadata:
      labels:
        app: app1
    spec:
      imagePullSecrets:
        - name: image-secrets
      containers:
        - name: inaudiotools
          securityContext:
            {}
          image: myregitry.io/app1:latest
          imagePullPolicy: Always
          ports:
          - containerPort: 9111

app2 部署文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "app2-deployment"
  labels:
    app: app2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app2
  template:
    metadata:
      labels:
        app: app2
    spec:
      imagePullSecrets:
        - name: imqge-secrets
      containers:
        - name: inaudiotools
          securityContext:
            {}
          image: myregitry.io/app2:latest
          imagePullPolicy: Always
          ports:
          - containerPort: 9112
          

标签: azurekubernetesazure-aks

解决方案


有多种方法可以将服务公开给外部流量

  • 集群 IP 服务:K8 为访问 pod 创建的默认服务。可以使用 kube proxy 公开服务。适合初学者,但不适合生产。
  • 节点端口:从特定节点端口公开服务。适合演示目的,但会导致可扩展性和可维护性问题。
  • 负载均衡器类型:公开服务的标准方法,它创建网络负载均衡器并在外部公开您的服务。这也是你用过的。
  • Ingress :实际上不是服务,而是位于负载均衡器中间的反向代理和 K8 中的多个服务,例如 nginx。反向代理能够将请求转发到基于 url 模式的任何服务,主机。假设在您的情况下 app1 使用https://host1.abc.com主机名,而 app2 使用https://host2.abc.com名称,当传入主机名是 host1.abc.com 时,nginx 将能够将请求路由到 app1当传入的主机名是 host2.abc.com 时到 app2。生产工作负载的最首选方式。

要回答您的特定查询,如果您只想继续使用负载均衡器类型,您需要创建一个新的负载均衡器类型服务,将流量路由到 app2。

apiVersion: v1
kind: Service
metadata:
  name: "app2-service"
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  selector:
    app: app2
  type: LoadBalancer
  loadBalancerIP: 10.1.2.100
  ports:
    - port: 9112

这将创建一个具有新静态公共 IP 的新 LB,并将请求路由到 app2。

缺点是

  • 在这种情况下,成本 Azure 将为每个服务旋转一个新的负载均衡器。
  • 维护:为每个服务而不是每个域一个新的 DNS 记录。

推荐阅读