具有私有 IP 的 Kubernetes 入口控制器



是否可以在没有公共IP地址的情况下部署入口控制器(nginx(?

谢谢!

是否可以

在没有公共IP地址的情况下部署入口控制器(nginx(?

毫无疑问,是的,如果入口控制器的Servicetype: NodePort,那么入口控制器的私有 IP 地址是每个Node的 IP 地址,位于指向Service:80:443的端口上。秘密地,这正是type: LoadBalancer正在发生的事情,只是在负载均衡器的IP地址和Node端口的绑定之间映射的云提供商的额外糖衣。

因此,为了关闭该循环:如果您希望拥有 100% 的内部入口控制器,请使用hostNetwork: true并将入口控制器的ports:绑定为主机的端口 80 和 443; 然后,创建一个 DNS(A 记录|CNAME 记录(,用于解析为群集中每个Node的地址的每个虚拟主机,以及 poof:100% 非面向 Internet 的入口控制器。

Google

Kubernetes Engine 中的内部 IP 入口

假设您要在 GKE 中部署没有公共 IP 地址的入口控制器 (nginx(。以下是对我有用的东西。

1. 安装带有适当注释的 Nginx-Ingress 控制器

使用 stable/nginx-ingresshelm chart 在 GKE 集群中安装 ingress-nginx 控制器。

根据此 GCP 文档,我们可以创建带有cloud.google.com/load-balancer-type: "Internal"注释的负载均衡器资源,以创建内部负载均衡器。运行以下命令,将控制器添加到 GKE。

helm install --name ingress-controller stable/nginx-ingress 
--set controller.service.annotations."cloud.google.com/load-balancer-type"="Internal"

2. 使用此控制器部署入口资源

要使入口资源使用控制器,请将kubernetes.io/ingress.class: nginx注释添加到入口资源。

使用 nginx-ingress 控制器的入口资源示例如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: nginx-test
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: my-service-1
servicePort: 80
path: /tasks
- backend:
serviceName: my-service-2
servicePort: 80
path: /

现在,使用kubectl命令可以看到分配给入口资源的 IP 是内部 IP 地址。

3.如果您也想使用TLS(可选(

将以下内容添加到 YAML 清单:

...
rules:
...
tls:
- hosts:
- www.example.com
secretName: my-certs

在上面的示例中,my-certs是一个 Kubernetes 机密,其中包含使用以下命令创建的服务器密钥、证书和 CA 证书:

kubectl create secret generic my-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt

对于上面的示例,使用引用此中型文章的示例主机名创建密钥和证书。

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新