问题:我目前正在EKS集群中使用ingress nginx将流量路由到需要公共访问的服务。
我的用例:我有一些服务要部署在同一个集群中,但不希望它们具有公共访问权限。我只想让pod与集群中的所有其他服务进行通信。这些pod是私有的,因为它们是后端服务,只需要pod到pod的通信。如何为此目的修改入口资源?
集群体系结构:所有服务都在集群的私有子网中,而负载均衡器在公共子网中
附加说明:我正在使用external-dns
为托管区域动态创建子域。托管区域是公共
感谢
以下是我的公共服务service.yml
和ingress.yml
。我想修改私人服务的这些文件
服务.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
入口.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应该已经可以工作,并且您的服务应该是私有的(如果您在公共云集群中这样设置(,除了Ingress本身。您可以更新ConfigMap以使用PROXY协议,这样您就可以将代理信息传递给入口控制器:
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 Networking的新手,那么这篇文章对你或Kubernete官方文档都很有用
在这里你可以找到其他可能对你有用的ELB注释