TraefikとNgixInngress-Coontrollerの展開
18822 ワード
前言
Traefik
TraefikはGolangで開発された軽量級のHttp逆エージェントと負荷イコライザである.バックエンドノードを自動的に配置して更新することができるので、現在は圧倒的に大部分のコンテナプラットフォームにサポートされています.例えば、Kubergnetes、Swarm、Rancherなどです.trefikは、リアルタイムでKubergnetes APIと相互作用するので、Serviceのノード変化に対して、trefikの反応はより迅速になります.全体的には、trefikはKubergnetesで完璧に動作することができます.
NFgix-Inngress-Coontroller
Ngins-Inngress-Coontrollerは、ほとんどのK 8 sに接触したばかりの人にとってはよく知られています.外部に露出したserviceの7層の逆代理です.現在の最新のコードネームは0.9.0-beta.15で、現在のnginx-ingres-controlはまだbetaバージョンにあります.しかし、接触した人は、nginx-ingres-controlの強大なAnnotate配置が、serviceに豊富な個性的な配置を提供することができます.これはtrefikにとってはまだ打てない状況です.
配置
Traefik
1.RBAD権限ルールの作成
ここでは主に2つの展開パターンが定義されています.それぞれDaementとDeploymentの違いは主に以下の通りです.は、一つのノードに対してdaemonesetのtrefikだけを配置し、deploymentを採用するとより伸縮しやすくなります. Daemensetは、 は、任意のノードで80及び443ポートにアクセスできるDaement方式を採用していますが、deploymentを使用する者はserviceで定義されたオブジェクトに依存してアクセスしなければなりません. 私たちはクベルネテツのマシン群に複数のingresサービスを展開しますので、ここではdeployment方式を統一して展開します.
TraefikのUIはAnglarJSによって書かれた簡潔なインターフェースであり、デフォルトのポートを起動するのは8080である.
使用については、ingressを編集した人が使ったことがあると信じています.ここでは疲れていません.主にTraefikのKubergnetesにおける
汎用プロファイル Kbernetes.io/ingress.class:trefikIngress声明では、ここでingresバックエンドはtrefikで実現され、nginxのcontroller ではないと宣言しています. ingres.kubernetes.io/whitelist-source-range:「1.2.3.0/24,fe 80:::/16」ホワイトリストへのアクセスを設定し、ipv 4とipv 6 をサポートします. ingress.kubernetes.io/auth-type:baichttp認証モードであり、ここではbaicモード である. ingress.kubernetes.io/auth-secret:mysecretbaic認証の対応するusernameとpassword、ここで対応するtrefikがあるKbernetes名前空間のsecrets フロントエンドの設定 trefik.frontend.rule.type:PathPrefixStripは、先端に複数のパスを配置して転送する場合には、変更オプションを設定しなければならない. trefik.frontend.prorit:"3"は先端の重みを配置して、値が高いほど優先的に にマッチングします. trefik.frontend.passHostHeader:「false」クローズ着信Hearder trefik.protocol=https使用httpsプロトコル trefik.frontented.ntryPoints=http,httpsはhttpとhttps を同時にサポートします.
バックエンドの設定 trefik.backend.loadbalancer.method=drrバックエンドServiceの負荷均衡戦略は、現在trefikでサポートされている戦略は、wrr(加重輪訓スケジュールアルゴリズム)とdrr(動的重み付け循環スケジュールアルゴリズム) を含む. trefik.backend.loadbalancer.stickiss=trueが負荷イコライザのsession親和性を開いているかどうか trefik.backend.loadbalancer.stickiss.co okie Name=NAME手動配置バックエンドsession親和性のcookie名称 trefik.backend.loadbalancer.sticky=true廃棄 健康診断 trefik.backend.healthcheck.path=/healthtrate fikの監視検査パス trefik.backend.healthcheck.interval=5 s健康診断の時間間隔 trefik.backend.circuitbreker:「Network ErrrorRatio()」0.5は、あるノードのサービスエラー率が50%に達すると自動的にノードをオフします. trefik.backend.circuitbreker:「LatencyAtQuation ileMS(50.0)」は、あるノードでサービスの遅延が50 ms以上であることを監視し、自動的にノードを下にする. trefik.backend.circuitbreker:「ResponseCodeRatio(500,600,0,600)」0.5は、あるノードのサービスの戻り状態コードが「500-600」であることを監視します. NFgix-Inngress-Coontroller
1.RBAC権限ルールとServiceAcceountアカウントを作成する
私はここでtcp-configmapを追加して、tcpポートの代理をします.
ここでは、定義されたtcp-configmapファイルに対して4層の負荷等化を行うnginx-iness-controllerの起動パラメータ
イングレスの使用については、私はここで次の文をまとめます.
締め括りをつける
この二日間でTraefikとNginnx-ingres-controllerの使用を通じて、ほとんどのシーンはTraefikが私の需要を満たすことができます.いや、この後のショーは先輩たちをビーチに撮影するリズムです.TraefikはKuberge友好と素早いサポートについて、皆さんが体験する価値があります.TraefikのGithub上のstarはすでに1.2 Wを超えています.200以上のreleassを発表しました.熱が低くないことが分かります.また、Traefikは、毎日何度も追加、削除、キラード、アップグレード、ダウングレードに苦しめられているマイクロサービスに対して、ほとんど神器です.trefikの後端を配置することには全く関心がありません.自動的にserviceの変化を監督してくれましたので、簡単に配置と熱を再ロードします.これもウェブサイトからhttpエージェント図を表示します.
Install with RBAC roles
Please check the RBAC document.
Using Helm
NGINX Ingress controller can be installed via Helm using the chart stable/inx from the offical charts repository.To install the chart with the release name
Traefik
TraefikはGolangで開発された軽量級のHttp逆エージェントと負荷イコライザである.バックエンドノードを自動的に配置して更新することができるので、現在は圧倒的に大部分のコンテナプラットフォームにサポートされています.例えば、Kubergnetes、Swarm、Rancherなどです.trefikは、リアルタイムでKubergnetes APIと相互作用するので、Serviceのノード変化に対して、trefikの反応はより迅速になります.全体的には、trefikはKubergnetesで完璧に動作することができます.
NFgix-Inngress-Coontroller
Ngins-Inngress-Coontrollerは、ほとんどのK 8 sに接触したばかりの人にとってはよく知られています.外部に露出したserviceの7層の逆代理です.現在の最新のコードネームは0.9.0-beta.15で、現在のnginx-ingres-controlはまだbetaバージョンにあります.しかし、接触した人は、nginx-ingres-controlの強大なAnnotate配置が、serviceに豊富な個性的な配置を提供することができます.これはtrefikにとってはまだ打てない状況です.
配置
Traefik
1.RBAD権限ルールの作成
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
2.deployment配置を定義するここでは主に2つの展開パターンが定義されています.それぞれDaementとDeploymentの違いは主に以下の通りです.
taints
およびtolerations
フィールドを利用してカスタマイズされたノードにtrefikサービスを配置することができる.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
args:
- --web
- --kubernetes
- --web.metrics
- --web.metrics.prometheus
- --accesslog
- --accesslog.filepath=/var/log/traefik_access.log
- --traefiklog
- --traefiklog.filepath=/var/log/traefik.log
- --traefiklogsfile=traefik.log
- --api
- --loglevel=INFO
- --metrics.prometheus
---
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
3.Traefikを構成するUIインターフェースTraefikのUIはAnglarJSによって書かれた簡潔なインターフェースであり、デフォルトのポートを起動するのは8080である.
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- port: 80
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: traefik-ui.minikube
http:
paths:
- backend:
serviceName: traefik-web-ui
servicePort: 80
4.使用使用については、ingressを編集した人が使ったことがあると信じています.ここでは疲れていません.主にTraefikのKubergnetesにおける
Annotate
の構成を説明します.汎用プロファイル
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cheeses
annotations:
kubernetes.io/ingress.class: traefik
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
バックエンドの設定
1.RBAC権限ルールとServiceAcceountアカウントを作成する
apiVersion: v1
kind: ServiceAccount
metadata:
name: nginx-ingress-serviceaccount
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: nginx-ingress-clusterrole
rules:
- apiGroups:
- ""
resources:
- configmaps
- endpoints
- nodes
- pods
- secrets
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- "extensions"
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- "extensions"
resources:
- ingresses/status
verbs:
- update
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: nginx-ingress-role
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- configmaps
- pods
- secrets
- namespaces
verbs:
- get
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
# Defaults to "-"
# Here: "-"
# This has to be adapted if you change either parameter
# when launching the nginx-ingress-controller.
- "ingress-controller-leader-nginx"
verbs:
- get
- update
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: nginx-ingress-role-nisa-binding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: nginx-ingress-role
subjects:
- kind: ServiceAccount
name: nginx-ingress-serviceaccount
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: nginx-ingress-clusterrole-nisa-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: nginx-ingress-clusterrole
subjects:
- kind: ServiceAccount
name: nginx-ingress-serviceaccount
namespace: kube-system
2.nginx-ingress-controllerのconfigmapファイルを作成する私はここでtcp-configmapを追加して、tcpポートの代理をします.
apiVersion: v1
data:
enable-vts-status: "true"
kind: ConfigMap
metadata:
name: ingress-configmap
namespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
name: ingress-controller-leader-nginx
namespace: kube-system
---
apiVersion: v1
data:
kind: ConfigMap
metadata:
name: tcp-configmap
namespace: kube-system
3.nginx-ingres-controllerを作成するdefault-http-backendapiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
k8s-app: default-http-backend
name: default-http-backend
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: default-http-backend
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
k8s-app: default-http-backend
spec:
containers:
- image: index.tenxcloud.com/google_containers/defaultbackend:1.1
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 8080
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: default-http-backend
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 60
---
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
namespace: kube-system
labels:
k8s-app: default-http-backend
spec:
ports:
- port: 80
targetPort: 8080
selector:
k8s-app: default-http-backend
4.nginx-ingres-controllerを作成するここでは、定義されたtcp-configmapファイルに対して4層の負荷等化を行うnginx-iness-controllerの起動パラメータ
--tcp-services-configmap
に注目することができる.注目すべきは、tcp-configmapで定義されているポートは重複しないことです.apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
labels:
k8s-app: nginx-ingress-controller
name: nginx-ingress-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: nginx-ingress-controller
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
k8s-app: nginx-ingress-controller
spec:
containers:
- args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
- --configmap=kube-system/ingress-configmap
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-configmap
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: index.int.jumei.com/gcr.io/google-containers/nginx-ingress-controller-amd64:0.9.0-beta.15
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: nginx-ingress-controller
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
securityContext:
privileged: true
dnsPolicy: ClusterFirst
serviceAccount: nginx-ingress-serviceaccount
serviceAccountName: nginx-ingress-serviceaccount
---
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress-controller
namespace: kube-system
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
name: http
- port: 443
protocol: TCP
targetPort: 443
name: https
selector:
k8s-app: nginx-ingress-controller
sessionAffinity: None
type: ClusterIP
5.使用イングレスの使用については、私はここで次の文をまとめます.
締め括りをつける
この二日間でTraefikとNginnx-ingres-controllerの使用を通じて、ほとんどのシーンはTraefikが私の需要を満たすことができます.いや、この後のショーは先輩たちをビーチに撮影するリズムです.TraefikはKuberge友好と素早いサポートについて、皆さんが体験する価値があります.TraefikのGithub上のstarはすでに1.2 Wを超えています.200以上のreleassを発表しました.熱が低くないことが分かります.また、Traefikは、毎日何度も追加、削除、キラード、アップグレード、ダウングレードに苦しめられているマイクロサービスに対して、ほとんど神器です.trefikの後端を配置することには全く関心がありません.自動的にserviceの変化を監督してくれましたので、簡単に配置と熱を再ロードします.これもウェブサイトからhttpエージェント図を表示します.
Install with RBAC roles
Please check the RBAC document.
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml \
| kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml \
| kubectl apply -f -
https://github.com/kubernetes/ingress-nginx/blob/master/deploy/README.md#install-with-rbac-rolesUsing Helm
NGINX Ingress controller can be installed via Helm using the chart stable/inx from the offical charts repository.To install the chart with the release name
my-nginx
:helm install stable/nginx-ingress --name my-nginx
If the kubernetes cluster has RBAC enabled、then run:helm install stable/nginx-ingress --name my-nginx --set rbac.create=true