是否可能在没有公共IP地址的情况下部署Ingress控制器(nginx)?
谢谢!
是否可能在没有公共IP地址的情况下部署Ingress控制器(nginx)?
谢谢!
helm install stable/nginx-ingress --set controller.service.annotations."cloud\.google\.com/load-balancer-type"="Internal"
对我很有用 :) - Amit Yadav假设您想在 GKE 中部署一个没有公共 IP 地址的入口控制器(nginx)。以下是我成功实现的方法。
使用 stable/nginx-ingress Helm chart 在我们的 GKE 集群中安装ingress-nginx controller。
根据这个 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"
为了让入口资源使用该控制器,请在您的入口资源中添加 kubernetes.io/ingress.class: nginx
注释。
一个使用 nginx-ingress 控制器的示例 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地址。
将以下内容添加到您的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
举个例子,以上的密钥和证书是使用一个样本主机名创建的,该主机名引用了这篇Medium文章。
希望这可以帮助到您。