【问题标题】:How to point K8s load balancer to pods in a different namespace如何将 K8s 负载均衡器指向不同命名空间中的 pod
【发布时间】:2021-12-01 15:42:34
【问题描述】:

我在 Kubernetes 集群上使用 Scaleway 部署了一个入口 pod,它存在于 kube-system 命名空间中。我不小心在 default 命名空间上创建了一个负载均衡器服务,我不想在 kube-system 命名空间上删除并重新创建一个新服务,所以我希望 default 命名空间中的负载均衡器拥有入口 pod作为端点:

apiVersion: v1
kind: Service
metadata:
  name: ecom-loadbalancer
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - port: 443
      targetPort: 443
  type: LoadBalancer

这可能吗?我应该在选择器字段中添加什么内容吗?


我尝试在 kube-system 命名空间中创建一个 clusterIP 服务来与入口 pod 进行通信,它成功了。

apiVersion: v1
kind: Service
metadata:
  name: ecom-loadbalancer
  namespace: kube-system
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - port: 443
      targetPort: 443
  type: ClusterIP

然后,我尝试在默认命名空间中将该服务引用到我的loadbalancer

apiVersion: v1
kind: Service
metadata:
  name: ecom-loadbalancer
spec:
  type: ExternalName
  externalName: ecom-loadbalancer.kube-system.svc.cluster.local
  ports:
    - port: 443
      targetPort: 443
  type: LoadBalancer

但没有结果。 clusterIP 指向 Ingress pod,但负载均衡器仍然没有端点。

【问题讨论】:

标签: kubernetes kubernetes-service


【解决方案1】:

您需要正确重新创建它的至少三个原因(2 个技术和建议):

  1. ExternalName 用于访问外部服务或其他命名空间中的服务。它的工作方式是在查找服务名称时,将返回 CNAME。所以换句话说,当请求应该被定向到其他地方时,它适用于出口连接。

    参见service - externalname type 和用例Kubernetes Tips - Part 1 blog post from Alen Komljen

    您的用例不同。您希望从 kubernetes 集群外部获取请求到公开的负载均衡器,然后将流量从它引导到集群内的另一个服务。内置 kubernetes 术语是不可能的,因为服务可以是LoadBalancerExternalName。您可以在上一个清单中看到有 两种 类型根本不起作用。见service types

  2. 避免不必要的复杂性。由于服务和其他部分将会越来越多,因此很难跟踪所有内容。

  3. 根据文档,使用 ExternalName 和某些协议通常可能会出现问题:

    警告:您可能无法将 ExternalName 用于某些常见问题 协议,包括 HTTP 和 HTTPS。如果您使用 ExternalName,那么 集群内的客户端使用的主机名不同于 ExternalName 引用的名称。

    对于使用主机名的协议,这种差异可能会导致错误或 意想不到的反应。 HTTP 请求将有一个 Host: 标头, 源服务器无法识别; TLS 服务器将无法 提供与客户端连接的主机名匹配的证书。

    Reference - Warning

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多