这是我在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 Ingress”:
类型:LoadBalancer IP:25.0.162.225 LoadBalancer Ingress:internal-a9716e ...... us-west-2.elb.amazonaws.com
据我所知,我使用的发布类型是"LoadBalancer",这有助于我将我的服务暴露给外部IP地址(请参阅https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/) . 而Ingress是一个不同的东西,它位于服务的前面,我没有在我的yml文件中定义它 . (参考:https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0)随着"LoadBalancer Ingress"我'm able to access my Service from outside the cluster, but I don' t理解为什么它被称为"LoadBalancer Ingress"?它与Ingress有什么关系?或者每个负载均衡器是否都配备了Ingress用于服务暴露目的?
1 回答
Ingress是揭示内容和方式的抽象定义 . 通常是指HTTP(S)流量,但有些摆弄也可以是其他模式/协议 .
Ingress Controller是一个特殊的实现,它将使用特定的软件实现Ingress定义的期望 . 无论是Nginx,Traefik还是其他一些可能致力于特定 Cloud 提供商的解决方案 .
他们将使用
Service
对象来查找用于到达特定流量的 endpoints 的 endpoints . 如果这是headless
,ClusterIP
,NodePort
或LoadBalancer
类型的服务,则无关紧要 .也就是说,
LoadBalancer
类型的服务在一个惊喜的负载均衡器上暴露你的服务 . 同样,通常与您的 Cloud 提供商有关 . 这是一种完全不同的公开服务的方式,就像NodePort
类型一样 .