我正在尝试使用头盔图安装Rancher2.x。 我想将其指向某个特定领域。
在我的集群中,请记住以下事实或假设:
我使用的Kubernetes集群是在Azure云平台中创建的。
我已经在Kubernetes集群中安装了cert-manager 0.10v
和kong ingress-controller
。
实际上,在我的部署中,我使用kong入口控制器和cert-manager与LetsEncrypt进行交互,并为通过Ingress资源公开的服务获取SSL / TLS加密。 我已经通过一些服务做到了这一点。
所以,就像我的想法是利用已有的kong和cert-manager部署一样,我正在通过helm chart安装带有以下标志参数的rancher:
--set hostname=rancher.mydomain.org
我想为我的牧场主部署分配一个特定的域。据此,我以前在azure平台上创建了一个公共静态IP地址,该地址将被分配为转发我的牧场主实例的外部IP,因此我在DNS提供程序中创建了一个A记录来获取此地址。
--set ingress.tls.source=letsEncrypt
我正在为Rancher服务选择SSL配置,告诉我要从LetsEncrypt获取证书,以便提前进行之前提到的kong和cert-manager部署。
--set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=letsencrypt-prod
正如我前面提到的,我已经使用了cert-manager,所以我已经创建了一个名为letsencrypt-prod的集群发行者,因此我加入了此选项标志参数,以便使用已经拥有的同一集群。
因此,当我安装牧场主掌舵表时:
helm install rancher-stable/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=rancher.domain.org \
--set ingress.tls.source=letsEncrypt \
--set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=letsencrypt-prod \
--set letsEncrypt.email=username@domain.org
我可以看到此部署会自动创建两个入口:
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/cm-acme-http-solver-5rv5v rancher.domain.org 80 74s
ingress.extensions/rancher rancher.domain.org 80, 443 3m28s
据我所知ingress.extensions/cm-acme-http-solver-5rv5v
是一个临时的入口资源,创建后等待cert-manager和kong操作与letencrypt联系,当它发生时,它应该消失,但是永远不会发生。这种入侵永远不会消失。
我意识到有些事情可能是在幕后,根据其掌舵图创建的牧场主入侵程序被开发为默认使用Nginx,如我在此处所示。
请参见anotations
属性
kubectl describe ingress.extensions/cm-acme-http-solver-5rv5v -n cattle-system
Name: cm-acme-http-solver-5rv5v
Namespace: cattle-system
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
rancher.mydomain.org
/.well-known/acme-challenge/q4B4ZFErLEu3wA8i5vICyJY61Wh806pB9vtazjv5jUk cm-acme-http-solver-j2n8p:8089 (10.244.1.70:8089)
Annotations:
kubernetes.io/ingress.class: kong
nginx.ingress.kubernetes.io/whitelist-source-range: 0.0.0.0/0,::/0
Events: <none>
您可以看到此kubernetes.io/ingress.class: kong
表示ingress.extensions/cm-acme-http-solver-5rv5v
将尝试与控管人kong
关于牧场主入口资源,这实际上是管理牧场主的真正入口过程,尽管它指向我的letsencrypt-prod
ClusterIssuer,也正在使用一些nginx注释,并且还指向另一个牧场主发行者。
这意味着该牧场主入口资源同时指向两个不同的发行者和clusterissuer。
⟩ kubectl describe ingress rancher -n cattle-system
Name: rancher
Namespace: cattle-system
Address:
Default backend: default-http-backend:80 (<none>)
TLS:
tls-rancher-ingress terminates rancher.possibilit.nl
Rules:
Host Path Backends
---- ---- --------
rancher.mydomain.org
rancher:80 (10.244.0.32:80,10.244.1.69:80,10.244.2.80:80)
Annotations:
certmanager.k8s.io/issuer: rancher
nginx.ingress.kubernetes.io/proxy-connect-timeout: 30
nginx.ingress.kubernetes.io/proxy-read-timeout: 1800
nginx.ingress.kubernetes.io/proxy-send-timeout: 1800
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreateCertificate 54m cert-manager Successfully created Certificate "tls-rancher-ingress"
[I]
如果我选择在helm installation rancher命令中包括上述选项,我的意思是:
--set ingress.tls.source=letsEncrypt \
--set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=letsencrypt-prod \
Rancher掌舵图安装过程是否会创建特定的Issuer和特定的入口,并且还可以与Nginx一起使用,而不与kong一起使用? 我想是的
尽管rancher.mydomain.org
的路由来自上述入口过程,但这些路由仍在我的kong数据库中创建:
仅仅是证书管理者,kong和letencrypt之间的握手是不可能的,而它的证明是acme挑战尚未完成。
但是我也想,我没有在任何步骤或步骤中指定头盔安装牧场主过程应指向我在Azure平台开始时创建的某些外部IP地址。
我期望舵图有一个特定的设置参数来应用负载均衡器IP……类似:
helm install rancher-latest/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=[rancher.mydomain.org](http://rancher.mydomain.org/) \
--set ingress.tls.source=letsEncrypt
# some purpose
--set proxy.type=LoadBalancer
--set proxy.loadBalancerIP=<myIpAddress>
之所以这样说,是因为kong实际上允许从舵图安装完成。
我认为这是有道理的,因为kong入口控制器未找到要引用和执行acme挑战的特定端点,这就是为什么在证书管理器窗格中我们没有任何事件的原因……
Every 2,0s: kubectl logs pod/cert-manager-79d7495f47-pjlrg -n cert-manager el-pug: Fri Sep 13 14:21:42 2019
I0909 13:32:36.925765 1 start.go:76] cert-manager "level"=0 "msg"="starting controller" "git-commit"="f1d591a53" "v
ersion"="v0.10.0"
I0909 13:32:36.927603 1 controller.go:184] cert-manager/controller/build-context "level"=0 "msg"="configured acme dn
s01 nameservers" "nameservers"=["10.0.0.10:53"]
I0909 13:32:36.928677 1 controller.go:149] cert-manager/controller "level"=0 "msg"="starting leader election"
I0909 13:32:36.930078 1 leaderelection.go:235] attempting to acquire leader lease cert-manager/cert-manager-control
ler...
I0909 13:32:36.931031 1 metrics.go:201] cert-manager/metrics "level"=0 "msg"="listening for connections on" "address
"="0.0.0.0:9402"
I0909 13:33:49.207086 1 leaderelection.go:245] successfully acquired lease cert-manager/cert-manager-controller
I0909 13:33:49.207919 1 controller.go:101] cert-manager/controller "level"=0 "msg"="not starting controller as it's
disabled" "controller"="certificaterequests-issuer-acme"
I0909 13:33:49.207934 1 controller.go:101] cert-manager/controller "level"=0 "msg"="not starting controller as it's
disabled" "controller"="certificaterequests-issuer-selfsigned"
I0909 13:33:49.207943 1 controller.go:101] cert-manager/controller "level"=0 "msg"="not starting controller as it's
disabled" "controller"="certificaterequests-issuer-vault"
I0909 13:33:49.207955 1 controller.go:101] cert-manager/controller "level"=0 "msg"="not starting controller as it's
disabled" "controller"="certificaterequests-issuer-venafi"
I0909 13:33:49.209061 1 controller.go:120] cert-manager/controller "level"=0 "msg"="starting controller" "controller
"="orders"
I0909 13:33:49.209074 1 controller.go:74] cert-manager/controller/orders "level"=0 "msg"="starting control loop"
I0909 13:33:49.209314 1 controller.go:120] cert-manager/controller "level"=0 "msg"="starting controller" "controller
"="certificates"
I0909 13:33:49.209333 1 controller.go:74] cert-manager/controller/certificates "level"=0 "msg"="starting control loo
p"
I0909 13:33:49.209364 1 controller.go:120] cert-manager/controller "level"=0 "msg"="starting controller" "controller
"="clusterissuers"
I0909 13:33:49.209419 1 controller.go:74] cert-manager/controller/clusterissuers "level"=0 "msg"="starting control l
oop"
在上述情况下,牧场主部署过程正在创建一个特定的入口,但是我想对该入口进行更多控制以便指向它,指向kong-ingress-controller
并应用一些基本身份验证插件和其他香港商品。
我的意思是我想让牧场主有这样的东西:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# add an annotation indicating the issuer to use.
certmanager.k8s.io/cluster-issuer: letsencrypt-prod # letsencrypt-staging
kubernetes.io/ingress.class: "kong"
# plugins.konghq.com: rancher-production-basic-auth, rancher-production-acl
name: production-rancher-ingress
namespace: cattle-system
spec:
rules:
- host: rancher.mydomain.org
http:
paths:
- backend:
serviceName: rancher
servicePort: 80
path: /
tls: # < placing a host in the TLS config will indicate a cert should be created
- hosts:
- rancher.mydomain.org
secretName: # letsencrypt-prod or secret/tls-rancher or whatever created with cert-manager
我的不便之处与ingress.extraAnnotations图表选项here有关吗?
如果是,我该如何管理这些自定义入口注释,以使我的牧场主安装具有外部IP地址,并且仅指向kong而不是nginx?