Kubernetes-Ingress 支持TCP/UDP的负载均衡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes-Ingress 支持TCP/UDP的负载均衡相关的知识,希望对你有一定的参考价值。

参考技术A 配置默认的backend

为了让Ingress Controller正常启动,需要给它配置一个默认的backend,用于当客户端访问的URL地址不存在时,能够返回一个正确的404应答。

这个backend服务用任何应用实现都可以,只要满足默认对/path的访问返回404的应答,同时能够提供/healthz路径以提供kubelet完成对它的健康检查。

这里default-backend的定义文件复制于kubernetes官方文档。 

https://github.com/kubernetes/ingress/blob/master/examples/deployment/nginx/default-backend.yaml

所需镜像地址为:gcr.io/google_containers/defaultbackend:1.0 

这里我已经push到了本地仓库里。 

内容如下:

apiVersion: extensions/v1beta1kind:Deploymentmetadata:  name:default-http-backendlabels:    k8s-app:default-http-backendnamespace: kube-systemspec:  replicas:1template:    metadata:      labels:        k8s-app:default-http-backendspec:      terminationGracePeriodSeconds:60containers:      - name:default-http-backend#Anyimage is permissableaslongas:        #1.Itserves a404page at /        #2.Itserves200on a /healthz endpoint        image:192.168.121.140:5000/defaultbackend        livenessProbe:          httpGet:            path: /healthz            port:8080scheme:HTTPinitialDelaySeconds:30timeoutSeconds:5ports:        - containerPort:8080resources:          limits:            cpu:10m            memory:20Mi          requests:            cpu:10m            memory:20Mi---apiVersion: v1kind:Servicemetadata:  name:default-http-backendnamespace: kube-system  labels:    k8s-app:default-http-backendspec:  ports:  - port:80targetPort:8080selector:    k8s-app:default-http-backend

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

创建backend

# kubectl apply -f default-backend.yaml

1

创建Ingress Controller

在kubernetes中,Ingress Controller将以Pod的形式运行,监控apiserver的/ingress接口后端的backend services,如果service发生变化,则Ingress Controller自动更新其转发规则。

在此使用谷歌提供的nginx-ingress-controller镜像。镜像地址为:gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.11(yaml中修改为了本地镜像)

这里是针对TCP的负载均衡例子。

对 kubernetes学习记录(6)——Guestbook Demo  frontend service做负载均衡。

首先是nginx-tcp-ingress-configmap.yaml

yaml定义文件复制自 https://github.com/kubernetes/ingress/blob/master/examples/tcp/nginx/nginx-tcp-ingress-configmap.yaml  

内容如下:(将9000端口转发到defaulf/frontend:80服务端口上)

apiVersion: v1kind: ConfigMapmetadata:  name: nginx-tcp-ingress-configmapnamespace: kube-systemdata:9000:"default/frontend:80"

1

2

3

4

5

6

7

创建

# kubectl create -f nginx-tcp-ingress-configmap.yaml

1

nginx-tcp-ingress-controller.yaml定义文件复制自 https://github.com/kubernetes/ingress/blob/master/examples/tcp/nginx/nginx-tcp-ingress-controller.yaml

内容如下:

apiVersion: v1kind: ReplicationControllermetadata:  name: nginx-ingress-controllerlabels:    k8s-app: nginx-ingress-lbnamespace: kube-systemspec:  replicas:1selector:    k8s-app: nginx-tcp-ingress-lbtemplate:    metadata:      labels:        k8s-app: nginx-tcp-ingress-lbname: nginx-tcp-ingress-lbspec:      terminationGracePeriodSeconds:60containers:-image:192.168.121.140:5000/nginx-ingress-controllername: nginx-tcp-ingress-lbreadinessProbe:          httpGet:            path: /healthz            port:10254scheme: HTTP        livenessProbe:          httpGet:            path: /healthz            port:10254scheme: HTTP          initialDelaySeconds:10timeoutSeconds:1env:-name: POD_NAME            valueFrom:              fieldRef:                fieldPath: metadata.name-name: POD_NAMESPACE            valueFrom:              fieldRef:                fieldPath: metadata.namespace        ports:-containerPort:80hostPort:80-containerPort:443hostPort:443-containerPort:9000hostPort:9000args:-/nginx-ingress-controller---default-backend-service=$(POD_NAMESPACE)/default-http-backend---tcp-services-configmap=$(POD_NAMESPACE)/nginx-tcp-ingress-configmap

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

创建:

# kubectl create -f nginx-tcp-ingress-controller.yaml

1

验证

从上图看出nginx-ingress-controller-fm45m运行在192.168.121.145上。之前的nginx-tcp-ingress-configmap定义的端口号是9000。

访问192.168.121.145:9000直接可以访问到Guestbook。

kubernetes-Ingress nginx

内部pod是Https apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: xxx name: xxx-web annotations: # 文件上传限制 nginx.ingress.kubernetes.io/pr

以上是关于Kubernetes-Ingress 支持TCP/UDP的负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes-Ingress资源详解

GKE 是不是支持带有静态 ip 的 nginx-ingress?

k8s nginx-ingress部署

如何从github上拉取项目中的指定目录

tcp服务器能支持多少个连接?

弄了一个支持SSL的TCP客户端