![](/img/trans.png)
[英]kubernetes ingress controller with cluster ip service and default nginx not working as expected
[英]Kubernetes Ingress Controller with private IP
是否可以在沒有公共 IP 地址的情況下部署入口控制器 (nginx)?
謝謝!
是否可以在沒有公共 IP 地址的情況下部署入口控制器 (nginx)?
毫無疑問,是的,如果 Ingress 控制器的Service
是type: NodePort
那么 Ingress 控制器的私有 IP 地址是每個Node
的 IP 地址,在端口上指向Service
:80
和:443
。 秘密地,這正是type: LoadBalancer
正在發生的事情,只是在負載均衡器的 IP 地址和綁定到Node
端口之間的雲提供商映射的額外糖衣。
因此,要關閉該循環:如果您希望擁有 100% 內部 Ingress 控制器,則使用hostNetwork: true
並綁定 Ingress 控制器的ports:
成為主機的端口 80 和 443; 然后,為每個解析為集群中每個Node
地址的虛擬主機創建一個 DNS(A 記錄|CNAME 記錄),並且 poof: 100% 非面向 Internet 的 Ingress 控制器。
假設您想在 GKE 中部署一個沒有公共 IP 地址的入口控制器 (nginx) 。 以下是對我有用的內容。
使用stable/nginx-ingress helm chart 在 out 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"
要使 Ingress 資源使用控制器,請將kubernetes.io/ingress.class: nginx
注釋添加到您的 Ingress 資源中。
使用 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 文章。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.