k8s traefik-ingress-controller搭建
K8S traefik-ingress-controller搭建ingress负责请求路由到内部的service,这里选择用traefik的方案网上很多nginx-ingress的教程应该都要更新了,这里和之前不一致了https://kubernetes.github.io/ingress-nginx/deploy/配置地址:https://github.com/containous/traefi
K8S traefik-ingress-controller搭建
ingress负责请求路由到内部的service,这里选择用traefik的方案
2.x版本参考:https://cloud.tencent.com/developer/article/1615712
网上很多nginx-ingress的教程应该都要更新了,这里和之前不一致了https://kubernetes.github.io/ingress-nginx/deploy/
配置地址(如果版本2.0以下可以直接去examples目录下获取yaml):
https://github.com/containous/traefik/tree/v1.7/examples/k8s
创建一个单独放置traefik的文件夹,下载或复制配置
分别运行
kubectl apply -f traefik-rbac.yaml
kubectl apply -f traefik-deployment.yaml
deployment配置中默认的service应该就是type: NodePort,如果不是就edit修改为nodeport
浏览器输入nodeip:nodeport即可访问ui页面
但是这样太low了,还得加端口
我尝试了将ingress直接代理到service上,虽然页面已经有了配置,host也已经配置成功的情况下依然访问不到
问题可能出现在节点ip上,这里是一个集群ip,外部无法访问,而nodeport又无法设置为80,所以只能使用host模式来代理,修改如下配置,添加hostNetwork
再看一下pod对应node的ip
kubectl get pod -n kube-system -o wide
创建ingress路由
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
# 修改主机的host文件 不是虚拟机的哦
- host: test.traefik.com
http:
paths:
- path: /
backend:
#service的名称
serviceName: traefik-ingress-service
#port的名称 一定要对上否则找不到
servicePort: controller
配置host(win的用户百度找下,mac /etc/hosts)
打开浏览器访问 http://test.traefik.com
为了测试能否代理不同的命名空间,我又创建了一个default命名空间的nginx pod
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
创建nginx-ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: test.nginx.com
http:
paths:
- path: /nginx
backend:
serviceName: nginx
servicePort: web
修改service,添加port名称为web
kubectl edit svc nginx
访问http://test.nginx.com/
看来不同命名空间的是可以共用一个ingress-controller的,但是service和ingress需要在同一个命名空间
以上是1.7版本
2.x版本,稍微有点坑,至于哪里坑我也不知道
2.3官网的Example,https://docs.traefik.io/routing/providers/kubernetes-crd/
crd和rbac如果不切换namespace的话可以直接执行,至于Deployment和IngressRoute的话,我这里是感觉有问题的,换成这样是可以
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik
labels:
app: traefik
spec:
selector:
matchLabels:
app: traefik
strategy:
type: Recreate
template:
metadata:
labels:
app: traefik
spec:
serviceAccountName: traefik-ingress-controller
tolerations:
- operator: "Exists"
containers:
- image: traefik:v2.3
name: traefik
ports:
- name: web
containerPort: 80
hostPort: 80
- name: websecure
containerPort: 443
hostPort: 443
args:
- --log.level=INFO
- --accesslog
- --entryPoints.web.address=:80
- --entryPoints.websecure.address=:443
- --api=true
- --api.dashboard=true
- --ping=true
# - --providers.kubernetesingress
- --providers.kubernetescrd
然后页面话使用内置的service
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
spec:
entryPoints:
- web
routes:
- match: Host(`test.traefik.com`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
但是这里有个问题,域名解析到master的ip时无法访问,node的ip是没问题的,不清楚什么情况,集群正常,nodeport,pod内解析servicename都ok,知道的大佬评论或私信交流下。。
更多推荐
所有评论(0)