kubernetesでtraefikの導入インストール
5969 ワード
参考githubプロジェクトアドレスhttps://github.com/containous/traefik
ドキュメントのアドレス:https://docs.traefik.io/
以下のプロファイルはすべてhttps://github.com/containous/traefik/tree/master/examples/k8s見つける
一配置
traefikには、deamonset形式とdeployment形式の2つの導入方法があります.2つの形式にはそれぞれ優位性がある.
deploymentを使用すると、伸縮性が向上します.
deamonset,Single-Pod-per-Nodeを使用します.ノードがクラスタに追加されると、DaemonSetは自動的に新しいノードに拡張されます.DaemonSetはNET_を使用できますBIND_SERVICE機能は、各ホスト上のポート80/443/etcにバインドできるように動作します.これにより、kube−proxyを迂回し、流量ホッピングを低減することができる.
まずrbacファイルを作成
deamonset方式は、コンフィギュレーションファイルにマシンのポートを直接露出し、hostPortによって実現される.アクセス時に未使用のkube-proxy.
deploymentの形式はnodePortの形式でアクセスしたポートを露出する.
作成
二使用
サービスへのIngressの作成
example:traefik webインタフェースへのアクセス
注意:ここのservicePortは、8080であってもよいし、nameで表されてもよい.以下のようにする.
三アクセス
Ingressのhostをローカルのhostsファイルに追加します.形式:[ノードIP host]
追加が完了すると、ブラウザからアクセスできます.
4つのドメイン名、パスの区別
example:
traefik.frontend.rule.type:PathPrefixStripはingressのannotationsに入れなければ有効になりません.
五アクセススケジューリング
バックグラウンドに複数のコピーがあるサービスの場合、デフォルトのスケジューリングはポーリングスケジューリングです.
サービスのannotationsでtraefikを構成できます.ingress.kubernetes.io/load-balancer-method: drr
スケジューリングアルゴリズムは動的ポーリングに変更され、スケジューリングされるサービスごとに重みが動的に調整されます.
ドキュメントのアドレス:https://docs.traefik.io/
以下のプロファイルはすべてhttps://github.com/containous/traefik/tree/master/examples/k8s見つける
一配置
traefikには、deamonset形式とdeployment形式の2つの導入方法があります.2つの形式にはそれぞれ優位性がある.
deploymentを使用すると、伸縮性が向上します.
deamonset,Single-Pod-per-Nodeを使用します.ノードがクラスタに追加されると、DaemonSetは自動的に新しいノードに拡張されます.DaemonSetはNET_を使用できますBIND_SERVICE機能は、各ホスト上のポート80/443/etcにバインドできるように動作します.これにより、kube−proxyを迂回し、流量ホッピングを低減することができる.
まずrbacファイルを作成
##traefik-rbac.yaml
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: traefik-ingress-controller
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: traefik-ingress-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: traefik-ingress-controller
subjects:
- kind: ServiceAccount
name: traefik-ingress-controller
namespace: kube-system
##traefik-ds.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: kube-system
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress-controller
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
hostPort: 80
- name: admin
containerPort: 8080
hostPort: 8580
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
args:
- --api
- --kubernetes
- --logLevel=INFO
---
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
name: web
- protocol: TCP
port: 8080
name: admin
deamonset方式は、コンフィギュレーションファイルにマシンのポートを直接露出し、hostPortによって実現される.アクセス時に未使用のkube-proxy.
##traefik-deployment.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress-controller
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-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: admin
containerPort: 8080
args:
- --api
- --kubernetes
- --logLevel=INFO
---
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
name: web
- protocol: TCP
port: 8080
name: admin
type: NodePort
deploymentの形式はnodePortの形式でアクセスしたポートを露出する.
作成
# rbac
kubectl create -f traefik-rbac.yaml
#
kubectl create -f traefik-ds.yaml
:
kubectl create -f traefik-deployment.yaml
二使用
サービスへのIngressの作成
example:traefik webインタフェースへのアクセス
###traefik-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
tls:
- secretName: traefik-cert
rules:
- host: traefik-ui.k8s
http:
paths:
- path: /
backend:
serviceName: traefik-ingress-service
servicePort: 8080
注意:ここのservicePortは、8080であってもよいし、nameで表されてもよい.以下のようにする.
###traefik-ingress2.yaml
---
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
type: NodePort
selector:
k8s-app: traefik-ingress-lb
ports:
- name: web
port: 80
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: traefik-ui.k8s
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
三アクセス
Ingressのhostをローカルのhostsファイルに追加します.形式:[ノードIP host]
追加が完了すると、ブラウザからアクセスできます.
4つのドメイン名、パスの区別
example:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cheeses
annotations:
traefik.frontend.rule.type: PathPrefixStrip
spec:
rules:
- host: cheeses.minikube
http:
paths:
- path: /stilton
backend:
serviceName: stilton
servicePort: http
- path: /cheddar
backend:
serviceName: cheddar
servicePort: http
- path: /wensleydale
backend:
serviceName: wensleydale
servicePort: http
traefik.frontend.rule.type:PathPrefixStripはingressのannotationsに入れなければ有効になりません.
五アクセススケジューリング
バックグラウンドに複数のコピーがあるサービスの場合、デフォルトのスケジューリングはポーリングスケジューリングです.
サービスのannotationsでtraefikを構成できます.ingress.kubernetes.io/load-balancer-method: drr
スケジューリングアルゴリズムは動的ポーリングに変更され、スケジューリングされるサービスごとに重みが動的に調整されます.