簡體   English   中英

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

[英]Kubernetes Ingress Controller with private IP

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

謝謝!

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

毫無疑問,是的,如果 Ingress 控制器的Servicetype: 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 控制器。

Google Kubernetes Engine 中的內部 IP 入口

假設您想在 GKE 中部署一個沒有公共 IP 地址的入口控制器 (nginx) 以下是對我有用的內容。

1. 使用適當的注解安裝 Nginx-Ingress 控制器

使用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"

2. 使用這個控制器部署入口資源

要使 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 地址。

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

對於上面的示例,密鑰和證書是使用示例主機名創建的,參考這篇Medium 文章

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM