我在让我的Ingress控制器在Google Container Engine上运行时遇到了困难。我想使用具有Basic Auth的NGINX Ingress Controller并使用保留的全局静态IP名称(这可以在Google Cloud Admin界面的外部IP地址部分中进行)。当我使用gce类时,一切正常,除了Basic Auth(我认为gce类不支持),当我尝试使用入口控制器启动的nginx类但是我保留的IP地址时,会输入代码Google Cloud Admin界面不会附加到Ingress Controller。有谁知道如何使这个工作?这是我的配置文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webserver
annotations:
kubernetes.io/ingress.global-static-ip-name: "myreservedipname"
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/auth-type: basic
ingress.kubernetes.io/auth-realm: "Auth required"
ingress.kubernetes.io/auth-secret: htpasswd
spec:
tls:
- secretName: tls
backend:
serviceName: webserver
servicePort: 80
我发现了一个带头盔的解决方案。
helm install --name nginx-ingress stable/nginx-ingress \
--set controller.service.loadBalancerIP=<YOUR_EXTERNAL_IP>
你应该使用external-ip
,而不是你用gcloud给出的名字。
另外,在我的情况下,我还添加了--set rbac.create=true
权限。
外部IP地址可以连接到Load Balancer,您可以将其指向Ingress控制器。
一个主要的评论 - 外部IP地址应该在the same region中保留为Kubernetes集群。
要做到这一点,你只需要使用type: LoadBalancer
部署你的Nginx-ingress服务并设置ExternalIP
值,如下所示:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app: ingress-nginx
spec:
loadBalancerIP: <YOUR_EXTERNAL_IP>
type: LoadBalancer
selector:
app: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
部署之后,Kubernetes将创建一个具有所需静态IP的新Load Balancer,它将成为Ingress的入口点。
@silgon,正如我所见,你已经尝试过这样做了,但没有得到肯定的结果。但是,它应该工作。如果不是 - 再次检查IP地址和配置区域。
这是我知道的一个例子,可能是你的语法问题:
kind: Ingress
metadata:
name: nginx
spec:
rules:
- host: nginx.192.168.99.100.nip.io
http:
paths:
- backend:
serviceName: nginx
servicePort: 80