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

时间:2018-07-05 14:26:45

标签: nginx kubernetes kubernetes-ingress

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

谢谢!

2 个答案:

答案 0 :(得分:3)

  

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

毫无疑问,是的,如果Ingress控制器的Servicetype: NodePort,则Ingress控制器的私有IP地址是每个 Node的IP地址,在指向:80的{​​{1}}和:443的端口上。秘密地,这正是Service所发生的一切,只是云提供商的额外糖衣在负载平衡器的IP地址与type: LoadBalancer的端口绑定之间进行了映射。

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

答案 1 :(得分:0)

Google Kubernetes Engine中的内部IP入口

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

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

使用stable/nginx-ingress掌舵图将ingress-nginx controller安装到GKE群集中。

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

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

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

要使Ingress资源使用控制器,请在您的Ingress资源中添加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地址。

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 Article的示例主机名创建的。

希望这会有所帮助。