您好,谢谢您抽出宝贵时间阅读我的问题。
首先,我有一个EKS群集设置,可以使用公共和专用子网。
我按照https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#vpc-create
所述使用cloudformation生成了集群。然后我通过kubectl apply -f (below file)
创建分till的服务帐户来初始化头盔:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
,然后helm init --service-account=tiller
跟着helm repo update
然后我使用头盔通过以下方式安装nginx-ingress控制器:
helm install --name nginx-ingress \
--namespace nginx-project \
stable/nginx-ingress \
-f nginx-ingress-values.yaml
我的nginx-ingress-values.yaml是:
controller:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-access-log-emit-interval: "60"
service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name: "abc-us-west-2-elb-access-logs"
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix: "vault-cluster/nginx"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-2:123456789:certificate/bb35b4c4-..."
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
到目前为止,一切看起来都很不错,我看到ELB已创建并连接起来,可将acm用于https
然后我通过以下方式安装kubernetes-dashboard:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
我可以通过kubectl proxy
但是当我通过以下方式为仪表板添加入口规则时:
kubectl apply -f dashboard-ingress.yaml
其中dashboard-ingress.yaml是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
namespace: kube-system
spec:
# tls:
# - hosts:
# - abc.def.com
rules:
- host: abc.def.com
http:
paths:
- path: /dashboard
backend:
serviceName: kubernetes-dashboard
servicePort: 8443
然后,当我尝试进入http://abc.def.com/时,我陷入了无限重定向循环。
与https://abc.def.com/相同 和 http://abc.def.com/dashboard
我是kubernetes的新手,对它一无所知。任何帮助将不胜感激
更新-9/5/2019: 当我从ingress.yaml中取出tls块时,我得到了
到nginx后端,但是http://abc.def.com将我转发到https://abc.def.com,我从openresty / 1.15.8.1获得502错误网关
然后我尝试去https://abc.def.com/dashboard
我得到“ 404页面未找到”,这是我理解的nginx-ingress控制器的响应。
更新-9/6/2019: 非常感谢mk_sta提供的以下答案,这些答案有助于我了解自己所缺少的内容。
对于以后阅读此书的任何人,我通过头盔进行的nginx-ingress安装均能按预期工作,但是我的kubernetes-dashboard安装缺少一些关键注释。最后,我能够通过以下方式配置头盔以安装kubernetes-dashboard:
helm install --name kubernetes-dashboard \
--namespace kube-system \
stable/kubernetes-dashboard \
-f kubernetes-dashboard-values.yaml
其中kubernetes-dashboard-values.yaml是:
ingress:
enabled: true
hosts: [abc.def.com]
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
paths: [/dashboard(/|$)(.*)]
然后我可以访问http://abc.def.com/dashboard/和https://abc.def.com/dashboard/上的信息中心
由于某种原因,如果我不使用斜杠,那么它将不起作用。
这对我来说已经足够了。
答案 0 :(得分:1)
在我看来,您在来源/dashboard
配置中使用了错误的位置路径Ingress
,甚至暴露了相关的 K8s dashboard UI 端点无论您何时未自定义此设置,默认情况下都将在443
端口上跨相应的K8s Service资源。
ports:
- port: 443
protocol: TCP
targetPort: 8443
为了获得基于routing的正确路径,请使用以下参数覆盖现有参数:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
一旦您决定通过间接路径持有者URL( https://abc.def.com/dashboard )访问 K8s仪表板用户界面,就可以在其中应用Rewrite规则为了透明地更改真实URL的一部分并将请求传输到忠实的目标路径。实际上, Nginx入口控制器通过特定的nginx.ingress.kubernetes.io/rewrite-target
annotation添加了此功能:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
namespace: kube-system
spec:
# tls:
# - hosts:
# - abc.def.com
rules:
- host: abc.def.com
http:
paths:
- path: /dashboard(/|$)(.*)
backend:
serviceName: kubernetes-dashboard
servicePort: 443
答案 1 :(得分:0)
如果您的集群没有将nginx
作为默认入口类,并且入口清单未指定一个,则可能会发生这种情况。
您可以尝试以下方法之一:
-在将controller.ingressClass
设置为nginx
的情况下升级NGINX-inress安装(默认情况下,所有创建的入口将使用NGINX-inress)
-将kubernetes.io/ingress.class: nginx
注释添加到您的入口Yaml中,以指定您希望NGINX入口处理它。