如何使用 traefik 入口控制器在 kubernetes 裸机上设置 https
How to set up https on kubernetes bare metal using traefik ingress controller
我是 运行 一个 kubernetes 集群,它由三个节点组成并且运行良好,但是是时候让我的 Web 应用程序安全了,所以我部署了一个入口控制器 (traefik)。但是我找不到在其上设置 https 的说明。我知道我必须做的大部分事情,比如设置一个 "secret"(带证书的容器)等,但我想知道如何配置我的入口控制器和所有与之相关的文件,这样我就可以使用安全连接
我已经配置了入口控制器并创建了一些前端和后端。我还配置了 nginx 服务器(它实际上是一个 Web 应用程序,我是 运行)在 443 端口上工作
我的 Web 应用程序部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: nginx
replicas: 3 # tells deployment to run 3 pods matching the template
template: # create pods using pod definition in this template
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: ilchub/my-nginx
ports:
- containerPort: 443
tolerations:
- key: "primary"
operator: Equal
value: "true"
effect: "NoSchedule"
Traefik 入口控制器部署代码
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
replicas: 1
selector:
matchLabels:
k8s-app: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: https
containerPort: secure
- name: admin
containerPort: 8080
args:
- --api
- --kubernetes
- --logLevel=INFO
traefik 仪表板的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: cluster.aws.ctrlok.dev
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
外部暴露相关配置
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
nodePort: 30036
name: web
- protocol: TCP
port: 443
nodePort: 30035
name: secure
- protocol: TCP
port: 8080
nodePort: 30034
name: admin
type: NodePort
我想做的是保护我已经 运行 的应用程序。最终结果必须是 https
上的网页 运行
实际上,您有 3 种方法可以配置 Traefik 使用 https 与后端通信 pods:
- 如果入口规范中定义的服务端口是 443(请注意,您仍然可以使用 targetPort 来使用您的 pod 上的不同端口)。
- 如果入口规范中定义的服务端口的名称以 https 开头(例如 https-api、https-web 或只是 https)。
- 如果入口规范包含注释 ingress.kubernetes。io/protocol:https.
如果这些配置选项中的任何一个存在,则后端通信协议假定为 TLS,并将自动通过 TLS 连接。
还应向 Ingress 对象添加额外的身份验证 annotations,例如:
ingress.kubernetes.io/auth-tls-secret: secret
我是 运行 一个 kubernetes 集群,它由三个节点组成并且运行良好,但是是时候让我的 Web 应用程序安全了,所以我部署了一个入口控制器 (traefik)。但是我找不到在其上设置 https 的说明。我知道我必须做的大部分事情,比如设置一个 "secret"(带证书的容器)等,但我想知道如何配置我的入口控制器和所有与之相关的文件,这样我就可以使用安全连接
我已经配置了入口控制器并创建了一些前端和后端。我还配置了 nginx 服务器(它实际上是一个 Web 应用程序,我是 运行)在 443 端口上工作
我的 Web 应用程序部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: nginx
replicas: 3 # tells deployment to run 3 pods matching the template
template: # create pods using pod definition in this template
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: ilchub/my-nginx
ports:
- containerPort: 443
tolerations:
- key: "primary"
operator: Equal
value: "true"
effect: "NoSchedule"
Traefik 入口控制器部署代码
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
replicas: 1
selector:
matchLabels:
k8s-app: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: https
containerPort: secure
- name: admin
containerPort: 8080
args:
- --api
- --kubernetes
- --logLevel=INFO
traefik 仪表板的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: cluster.aws.ctrlok.dev
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
外部暴露相关配置
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
nodePort: 30036
name: web
- protocol: TCP
port: 443
nodePort: 30035
name: secure
- protocol: TCP
port: 8080
nodePort: 30034
name: admin
type: NodePort
我想做的是保护我已经 运行 的应用程序。最终结果必须是 https
上的网页 运行实际上,您有 3 种方法可以配置 Traefik 使用 https 与后端通信 pods:
- 如果入口规范中定义的服务端口是 443(请注意,您仍然可以使用 targetPort 来使用您的 pod 上的不同端口)。
- 如果入口规范中定义的服务端口的名称以 https 开头(例如 https-api、https-web 或只是 https)。
- 如果入口规范包含注释 ingress.kubernetes。io/protocol:https.
如果这些配置选项中的任何一个存在,则后端通信协议假定为 TLS,并将自动通过 TLS 连接。
还应向 Ingress 对象添加额外的身份验证 annotations,例如:
ingress.kubernetes.io/auth-tls-secret: secret