kubernetes 部署ingress

https://www.cnblogs.com/dingbin/p/9754993.html

明天尝试一下  之前的文档里面一直没有提 需要改host文件 我有点懵逼了。 
 

kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理是:

Ingress Controller 会动态感知集群中的Ingress的规则变化,然后读取,动态生成Nginx的配置文件,最后注入到运行nginx的pod的中,然后会自动reload,配置生效。

用kubernetes Ingress  是由于它是7层调度,可以直接卸载https会话,代理的后端的pod可以直接使用明文的http协议。

而Service NodePort得类型,是4层得调度,做不到这点,然而现在https是一种趋势,所以在kubernetes 对外暴露服务得时候我们还是要选择Ingress。

下面我们来看下Ingress得部署:

首先创建一个文件夹专门放置Igress得yaml得文件,mkdir ingress

创建后端代理得pod得yaml文件,如下:

apiVersion: v1
kind: Service
metadata:
  name: myapp-ding
  namespace: default
spec:
  selector:
    app: myapp
    release: ding
  ports:
    - name: http
      port: 80
      targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-ding
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: ding
  template:
    metadata:
      labels:
        app: myapp
        release: ding
    spec:
      containers:
        - name: myapp-ding
          image: ikubernetes/myapp:v2
          ports:
            - name: http
              containerPort: 80

pod得yaml文件一定要有Service,

部署Ingress Controller

在kubernetes 得github上下载ingress得yaml文件,地址:https://github.com/kubernetes/ingress-nginx/tree/master/deploy

ingress得所需得文件:configmap.yaml ,namespace.yaml,rbac.yaml,tcp-services-configmap.yaml,with-rbac.yaml

同时在ingress得官方文档中介绍到,需要下载service-nodeport.yaml文件,这个文件得目的是为Ingress Controller 接入外部得流量,如果没有这个文件,是无法通过

外部访问得。这个文件其实就是为Ingress Controller 创建一个NodePort 类型得Service,这里我稍微修改了下service-nodeport.yaml,如下:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
      nodePort: 30080   添加了这行,固定下外部访问的端口
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
      nodePort: 30443   添加了这行
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

开始安装,应用namespace.yaml   kubectl apply -f namespace.yaml

其他得yaml为文件可以一起应用   cd  ingress ,kubectl apply -f .     应用所有的文件

Ingress Controller 部署部署好了,现在要写ingress的规则,注入到ingress-nginx pod的配置文件中

vim ingress-myapp.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-ding
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"   这里是说明ingress的类型使用的nginx,一定要说明这点,否则ingress Controller 不知道是配置成那种类型的配置文件
spec:
  rules:
  - host: test.ding.com     使用的是虚拟主机的来访问的
    http:
      paths:
      - path:
        backend:
          serviceName: myapp-ding  代理的后端的pod的service,通过这个service来生成nginx的upstrm
          servicePort: 80   

kubectl apply -f ingress-myapp.yaml

访问的客户端的机器配置下域名解析

现在我们可以通过test.ding.com:30080来访问到后端代理的pod了

这里是使用http访问的,如果要用https,首先我们要创建一个证书,步骤如下

[root@master ingrss]# openssl genrsa -out tls.key 2048
Generating RSA private key, 2048 bit long modulus
.........................................................................................................................................................................................................................................................+++
..............................................................+++
e is 65537 (0x10001)
[root@master ingrss]# openssl req -new -x509 -key tls.key -out tls.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Hefei
Locality Name (eg, city) [Default City]:Hefei
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:test.ding.com
Email Address []:

证书生成好了,然后把证书转成secret,

kubectl create secret tls ding-ingress-secret --cert=tls.crt --key=tls.key

修改下 ingress-myapp.yaml 加入刚刚添加的secret,修改后的文件如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-ding
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:    添加了tls这一段
  - hosts:
    - test.ding.com
    secretName: ding-ingress-secret  这里结束
  rules:
  - host: test.ding.com
    http:
      paths:
      - path:
        backend:
          serviceName: myapp-ding
          servicePort: 80

现在我们可以通过https访问了

总结下,部署ingress,首先要部署下后端代理的pod,这组pod必须要有service,service的作用是用于ingress规则代理到后端pod的,通俗点就是这个service仅仅是给这组pod分组的,没有其他的左右。接着部署Ingress Controller,最后是写ingress的规则,让Ingress Controller 发现注入到ingress-nginx的pod中生成配置文件

最后补一张ingress-nginx pod里nignx的配置文件的图:

kubectl exec -n ingress-nginx -it nginx-ingress-controller-6dc8769b5-zljbw -- /bin/bash

好了,ingress部署完成,哪里有不对的地方希望各位朋友指出,大家相互学习!

【转帖】kubernetes 部署ingress的更多相关文章

  1. kubernetes 部署ingress

    kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理 ...

  2. kubernetes nginx ingress controller部署

    Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...

  3. Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress

    更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...

  4. [转帖]Kubernetes的部署策略

    Kubernetes的部署策略,你常用哪种? https://www.sohu.com/a/318731931_100159565?spm=smpc.author.fd-d.78.1574127778 ...

  5. [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源

    基于kubernetes 部署 jenkins master 比较简单,难点是为 jenkins 动态分配资源.基于kubernetes 为 jenkins 动态分配资源需要实现下述功能: 资源分配: ...

  6. kubernetes之ingress及ingress controller

    什么是ingress Ingress是授权入站连接到达集群服务的规则集合. 从外部流量调度到nodeprot上的service 从service调度到ingress-controller ingres ...

  7. nuclio kubernetes 部署

    一张参考架构图: 从图中可以看到nuclio可以运行到docker 以及kubernetes中 提供了kubernetes 部署的脚本 安装 创建命名空间 kubectl create namespa ...

  8. kubernetes 之ingress

    www.cnblogs.com/hellojackyleon/p/8420911.html apiVersion: extensions/v1beta1 kind: Deployment metada ...

  9. 使用traefik作为kubernetes的ingress

    目录 说明 部署 创建一个独立的命名空间 配置rbac授权 配置secret 创建一个configmap用于存放traefik的配置文件 配置traefik的deployment文件 配置服务 通过p ...

随机推荐

  1. Pytest权威教程26-示例和自定义技巧

    目录 示例和自定义技巧 返回: Pytest权威教程 示例和自定义技巧 这是一个(不断增长的)示例列表.如果你需要更多示例或有疑问,请联系我们.另请参阅包含许多示例代码段的 综合文档.此外,stack ...

  2. ActiveMq 本地安装及启动(Windows)

    首先下载MQ的安装包 http://activemq.apache.org/download.html 1.点击最新版本的ActiveMQ的 2.这里有窗户版本和Linux的的版本,这里我们选择窗口版 ...

  3. Python: 在CSV文件中写入中文字符

    0.2 2016.09.26 11:28* 字数 216 阅读 8053评论 2喜欢 5 最近一段时间的学习中发现,Python基本和中文字符杠上了.如果能把各种编码问题解决了,基本上也算对Pytho ...

  4. GWAS 全基因组关联分析 | summary statistic 概括统计 | meta-analysis 综合分析

    有很多概念需要明确区分: 人有23对染色体,其中22对常染色体autosome,另外一对为性染色体sex chromosome,XX为女,XY为男. 染色体区带命名:在标示一特定的带时需要包括4项:① ...

  5. Spatial-Temporal Relation Networks for Multi-Object Tracking

    Spatial-Temporal Relation Networks for Multi-Object Tracking 2019-05-21 11:07:49 Paper: https://arxi ...

  6. Linux安装Windows字体

    Linux系统使用Windows系统字体的方法 2017年12月26日 09:35:54 知行合一2018 阅读数 1989更多 分类专栏: 杂项   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  7. 002 docker基本的命令

    可以参看文章: URL: https://www.yiibai.com/docker/docker-useful-commands.html

  8. darknet 的python接口使用

    首先,python接口文件在安装好的darknet目录下的python文件夹,打开就可以看到 这里的darknet.py文件就是python接口 用编辑器打开查看最后部分代码: 使用十分简单,先将网络 ...

  9. 【转】暴力破解无线WiFi密码

    # coding:utf-8 import pywifi from pywifi import const import time from asyncio.tasks import sleep cl ...

  10. 利用OpenGL固定流水线绘制球体

    在OS X上的一个OpenGL简单demo.所附赠的代码是绘制半个球体.开启了深度缓存和多重采样,采样数是4. 详细下载地址请见:http://www.cocoachina.com/bbs/read. ...