azure - 用于不同端口的 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
解决方案
有多种方法可以将服务公开给外部流量
- 集群 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 记录。
推荐阅读
- php - 简单的 while 循环返回“调用未定义函数”错误
- c++ - C++中变量的位表示
- swift - 使用 os_log 记录函数参数或其他动态数据
- javascript - 如何在反应导航中不受headerLeft影响而使标题居中?
- r - R - 如何按组预测具有多个变量的每日时间序列
- python-3.x - 使用 Python 归档文件
- c - Segmentation fault 与 Struct 的关系
- python - 绘图图例显示未知项目/相同的图例项目以不同的线条显示两次
- regex - Apache 2.4 如何使用 SetEnvIf 从日志中排除某些 GET 请求
- python - 绘制子图 - Python