kubernetes - 在 Kind 上使用 Ingress 和 LoadBalancer 类型的服务
问题描述
在审查一个项目时,我发现了一个让我很感兴趣的定义:使用 Ingress 和 LoadBalancer 类型的服务,而无需在Kind上安装负载均衡器本身。按照定义,它似乎有效,但我不知道为什么。我说它有效,因为我能够按预期在浏览器上卷曲应用程序。
代码:
apiVersion: apps/v1
kind: Deployment
metadata:
name: server
labels:
app: server
spec:
replicas: 1
selector:
matchLabels:
app: server
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: localhost:5000/server:2.0
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: server
name: server
spec:
type: LoadBalancer
selector:
app: server
ports:
- port: 8080
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: server
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: server
port:
number: 8080
我认为先点击 Ingress,然后再点击 LoadBalancer 会导致一些重定向问题。我对这种情况的选择是一个简单的 ClusterIP,这个答案同意。如果集群上没有安装 MetalLB,LoadBalancer 在这里做什么? 这可能需要这样的东西,但据我所知,负载均衡器本身就是集群外部的资源,即:云提供商负载均衡器。
解决方案
如果集群上没有安装 MetalLB,LoadBalancer 在这里做什么?
MetalLB是裸机Kubernetes集群的load-balancer
实现。因此,如果您在裸机上,MetaLB 就会出现。
如果您处于托管状态,如果您在没有 MetalLB 的情况下提及YAML配置, LoadBalancer将自动创建。
LoadBalancer 在这里做什么?
由于它在 YAML 配置中提到,将为该服务创建 LoadBalancer。
是的,您可以使用ClusterIP而不是创建LoadBalancer服务。更改类型并从服务中删除。
理想的交通流量是这样的
Internet > LoadBalancer > Ingress > ingress controller (Backend) > service > deployment > Pods > container
是的,如果您使用任何托管,LB 是CloudProvider的资源。
推荐阅读
- react-native - 使用 Switch Case React Native 时出现语法错误
- authentication - Oracle Apex 身份验证方案?
- applepay - Apple Pay completeMerchantValidation 取消会话
- c++ - 用于评估指向成员的指针的 C++ 可变参数模板
- r - 在 qqp(分位数比较图)图中计算置信区间 (CI) 之外的点数
- npm - NPM 版本中的错误 - 将补丁版本列入黑名单
- php - 如何限制用户从数据库中获取类似数据的视频并每天只显示一个视频
- django - Django 和 Nginx 设置不提供静态文件
- laravel - Laravel 背包多态 CRUD 字段
- html - 如何标记表格的水平轴和垂直轴?