kubernetes学习记录(12)——Ingress(demo为TCP的负载均衡)

参考了https://github.com/kubernetes/ingress上的内容进行学习。

有关Ingress的介绍可以阅读http://jimmysong.io/kubernetes-handbook/concepts/ingress.html这篇博客,它是对Kubernetes官方文档中关于Ingress部分的翻译。

先记录安装配置过程,之后再慢慢深入研究。

配置默认的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/v1beta1
kind: Deployment
metadata:
  name: default-http-backend
  labels:
    k8s-app: default-http-backend
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        k8s-app: default-http-backend
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: default-http-backend
        # Any image is permissable as long as:
        # 1. It serves a 404 page at /
        # 2. It serves 200 on a /healthz endpoint
        image: 192.168.121.140:5000/defaultbackend
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        ports:
        - containerPort: 8080
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
          requests:
            cpu: 10m
            memory: 20Mi
---
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

创建backend

# kubectl apply -f default-backend.yaml

创建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: v1
kind: ConfigMap
metadata:
  name: nginx-tcp-ingress-configmap
  namespace: kube-system
data:
  9000: "default/frontend:80"

创建

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

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

内容如下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-controller
  labels:
    k8s-app: nginx-ingress-lb
  namespace: kube-system
spec:
  replicas: 1
  selector:
    k8s-app: nginx-tcp-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: nginx-tcp-ingress-lb
        name: nginx-tcp-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - image: 192.168.121.140:5000/nginx-ingress-controller
        name: nginx-tcp-ingress-lb
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          timeoutSeconds: 1
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        - containerPort: 9000
          hostPort: 9000
        args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --tcp-services-configmap=$(POD_NAMESPACE)/nginx-tcp-ingress-configmap

创建:

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

验证

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

PowerSAP:一款强大的PowerShell SAP安全审计工具

今天给大家介绍的是一款名叫PowerSAP的工具,该工具在今年正是添加到了BlackHat武器库中。这款工具并没有重复造轮子,并且代码现已全部开源。

863
来自专栏idba

快速备份恢复工具mydumper/myloader

一 前言 大家对于MySQL的逻辑备份工具mysqldump应该都比较了解,本文介绍一款由MySQL ,Facebook 等公司的开发维护另外一套逻辑备份恢...

1423
来自专栏pangguoming

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献。  于是,公司写...

1861
来自专栏散尽浮华

MySQL高可用架构-MMM环境部署记录

MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MM...

21511
来自专栏三木的博客

FUSE

###一、FUSE简介 FUSE(用户空间文件系统)是这样一个框架,它使得FUSE用户在用户态下编写文件系统成为可能,而不必和内核打交道。FUSE由三个部分组成...

2266
来自专栏散尽浮华

LVM常规操作记录梳理(扩容/缩容/快照等)

基本介绍 Linux用户安装Linux 操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。随着 Linux的逻辑盘...

2116
来自专栏Hadoop实操

如何使用CDSW在CDH中分布式运行所有R代码

无需额外花费过多的学习成本,sparklyr(https://spark.rstudio.com)可以让R用户很方便的利用Apache Spark的分布式计算能...

4496
来自专栏码字搬砖

kafka权限认证

背景: 最近公司因为用的云服务器,需要保证kafka的安全性。可喜的是kafka0.9开始,已经支持权限控制了。网上中文资料又少,特此基于kafka0.9,...

1633
来自专栏惨绿少年

OpenStack云计算之路-Mitaka 版本

1.1 云计算简介 云计算(英语:cloud computing ),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种...

4288
来自专栏琯琯博客

laravel 5.4 + dingo api + jwt 代替 Passport

新装一个LV composer create-project --prefer-dist laravel/laravel myApiProject 安装ding...

3158

扫码关注云+社区