Ingress与Kubernetes服务负载平衡器有什么关系?

时间:2018-11-20 19:07:38

标签: kubernetes kubernetes-ingress internal-load-balancer

这是我在k8s.yml文件中定义的:

apiVersion: v1
kind: Service
metadata:
  name: myservice
  namespace: mynamespace
  labels:
    app: myservice
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
    external-dns.alpha.kubernetes.io/hostname: "myservice."
spec:
  selector:
    app: myservice
  type: LoadBalancer
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    protocol: TCP

运行此命令:

kubectl describe service myservice

像这样给我“ LoadBalancer入口”:

  

类型:LoadBalancer IP:
  25.0.162.225 LoadBalancer入口:internal-a9716e ...... us-west-2.elb.amazonaws.com

据我了解,我正在使用的发布类型是“ LoadBalancer”,它可以帮助我将服务公开给外部IP地址(请参阅https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/)。 而Ingress是位于Services前面的另一回事,我没有在yml文件中定义它。 (请参阅:https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0) 通过“ LoadBalancer Ingress”,我可以从群集外部访问我的服务,但是我不明白为什么将其称为“ LoadBalancer Ingress”?它与Ingress有什么关系?还是每个负载均衡器都配备了一个用于服务公开目的的Ingress?

1 个答案:

答案 0 :(得分:1)

Ingress是公开内容和方式的抽象定义。通常指的是HTTP(S)流量,但也有些麻烦,其他模式/协议也可以。

Ingress Controller是一个特定的实现,它将使用特定的软件来实现您的Ingress定义的期望。无论是Nginx,Traefik还是其他可能专用于特定云提供商的解决方案。

他们将使用Service对象作为查找到达他们的特定交通的终点的手段。这是headlessClusterIPNodePortLoadBalancer类型的服务都没有关系。

也就是说,LoadBalancer类型的服务会在令人惊讶的负载均衡器上公开您的服务。同样,通常与您的云提供商有关。与NodePort类型一样,这是一种完全不同的公开服务的方式。