如何解决为不同命名空间上的服务提供不同的公共 IP/URL
我目前正在 production
命名空间内运行一组 Pod 和服务。服务通过 kubernetes nginx-ingress 控制器公开。
这工作正常,可以毫无问题地访问所有资源。
我现在想要实现的是拥有另一个包含其他类型资源和服务的命名空间 staging
,并且还能够使用公共 IP/url 访问它们。此 IP 应与 production
公共 IP 不同,因为我们不想更改 Nginx 入口上的 URL 架构。
有没有办法使用 Nginx 控制器来实现这一点?我们在 AKS 上运行并使用以下 helm 命令安装了 Nginx 入口:
# Create a namespace for your ingress resources
kubectl create namespace ingress-basic
# Add the ingress-Nginx repository
helm repo add ingress-Nginx https://kubernetes.github.io/ingress-Nginx
# Use Helm to deploy an Nginx ingress controller
helm install nginx-ingress ingress-Nginx/ingress-Nginx \
--namespace ingress-basic \
--set controller.replicaCount=2 \
--set controller.nodeselector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeselector."beta\.kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.nodeselector."beta\.kubernetes\.io/os"=linux
如下所述:https://docs.microsoft.com/en-us/azure/aks/ingress-basic
这是我们在舵图上使用的入口:
apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
name: my-ingress
namespace: {{ .Release.Namespace }}
annotations:
kubernetes.io/ingress.class: "Nginx"
Nginx.ingress.kubernetes.io/use-regex: "true"
Nginx.ingress.kubernetes.io/enable-cors: "true"
cert-manager.io/issuer: "letsencrypt-prod"
watch-namespace: {{ .Release.Namespace }}
# Nginx.ingress.kubernetes.io/ssl-redirect: "false"
# Nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
# Limit uploads to 8TB
Nginx.ingress.kubernetes.io/proxy-body-size: 800000m
spec:
tls:
- secretName: my-cert-tls
hosts:
- {{ .Values.myDomain }}
rules:
- host: {{ .Values.myDomain }}
http:
paths:
# NOTE: this one should come after all other routes. To avoid hijacking requests.
- path: /api/svc1(/|$)(.*)
backend:
serviceName: svc1
servicePort: 8080
- path: /api(/|$)(.*)
backend:
serviceName: svc2
servicePort: 8080
- path: /(.*)
backend:
serviceName: svc3
servicePort: 8080
- http:
paths:
# NOTE: this one should come after all other routes. To avoid hijacking requests.
- path: /api/svc2(/|$)(.*)
backend:
serviceName: svc2
servicePort: 8080
- path: /api(/|$)(.*)
backend:
serviceName: svc1
servicePort: 8080
- path: /(.*)
backend:
serviceName: svc3
servicePort: 8080
基本上我想看看:
- IP 1 => namespace1 资源
- IP 2 => namespace2 资源
IP1 永远无法访问 namespace2,反之亦然。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。