如何使用 Ingress Nginx 控制器将流量路由到私有 pods 内部
How to use Ingress Nginx Controller to route traffic to private pods Internally
问题:我目前在我的 EKS 集群中使用 ingress-nginx 将流量路由到需要 public 访问的服务。
我的用例:我想在同一个集群中部署一些服务,但不希望它们具有 public 访问权限。我只希望 pods 与集群中的所有其他服务进行通信。那些 pods 是私有的,因为它们是后端服务,只需要 pod 到 pod 通信。我该如何为此目的修改我的入口资源?
集群架构:所有服务都在集群的私有子网中,而负载均衡器在 public 子网中
附加说明:我正在使用 external-dns
为托管区域动态创建子域。托管区域是 public
谢谢
下面是我的 service.yml
和 ingress.yml
的 public 服务。我想为私人服务修改这些文件
service.yml
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: myapp
annotations:
external-dns.alpha.kubernetes.io/hostname: myapp.dev.com
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: myapp
ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
namespace: myapp
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
labels:
app: myapp
spec:
tls:
- hosts:
- myapp.dev.com
secretName: myapp-staging
rules:
- host: myapp.dev.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: 'myapp'
port:
number: 80
据此,Ingress 应该已经可以工作,并且您的服务应该是私有的(如果您在 public 云集群中这样设置),Ingress 本身除外。您可以更新 ConfigMap 以使用 PROXY 协议,以便您可以将代理信息传递给 Ingress Controller:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-config
namespace: nginx-ingress
data:
proxy-protocol: "True"
real-ip-header: "proxy_protocol"
set-real-ip-from: "0.0.0.0/0"
然后:kubectl apply -f common/nginx-config.yaml
现在您可以使用指定的名称部署您想要私有的任何应用程序(例如您提供的 yaml 文件中的 myapp
服务。
如果您是 Kubernetes 网络的新手,那么 this article 对您或 Kubernetes 官方文档会有用
Here您可以找到其他可能对您有用的 ELB 注释
问题:我目前在我的 EKS 集群中使用 ingress-nginx 将流量路由到需要 public 访问的服务。
我的用例:我想在同一个集群中部署一些服务,但不希望它们具有 public 访问权限。我只希望 pods 与集群中的所有其他服务进行通信。那些 pods 是私有的,因为它们是后端服务,只需要 pod 到 pod 通信。我该如何为此目的修改我的入口资源?
集群架构:所有服务都在集群的私有子网中,而负载均衡器在 public 子网中
附加说明:我正在使用 external-dns
为托管区域动态创建子域。托管区域是 public
谢谢
下面是我的 service.yml
和 ingress.yml
的 public 服务。我想为私人服务修改这些文件
service.yml
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: myapp
annotations:
external-dns.alpha.kubernetes.io/hostname: myapp.dev.com
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: myapp
ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
namespace: myapp
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
labels:
app: myapp
spec:
tls:
- hosts:
- myapp.dev.com
secretName: myapp-staging
rules:
- host: myapp.dev.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: 'myapp'
port:
number: 80
据此,Ingress 应该已经可以工作,并且您的服务应该是私有的(如果您在 public 云集群中这样设置),Ingress 本身除外。您可以更新 ConfigMap 以使用 PROXY 协议,以便您可以将代理信息传递给 Ingress Controller:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-config
namespace: nginx-ingress
data:
proxy-protocol: "True"
real-ip-header: "proxy_protocol"
set-real-ip-from: "0.0.0.0/0"
然后:kubectl apply -f common/nginx-config.yaml
现在您可以使用指定的名称部署您想要私有的任何应用程序(例如您提供的 yaml 文件中的 myapp
服务。
如果您是 Kubernetes 网络的新手,那么 this article 对您或 Kubernetes 官方文档会有用
Here您可以找到其他可能对您有用的 ELB 注释