📜  OpenShift-基本概念

📅  最后修改于: 2020-10-31 13:51:40             🧑  作者: Mango


在开始实际设置和部署应用程序之前,我们需要了解OpenShift V3中使用的一些基本术语和概念。

容器和图像

图片

这些是OpenShift的基本构建块,由Docker映像组成。在OpenShift的每个Pod中,集群内部都有自己的映像。配置Pod时,我们有一个将从注册表中合并的字段。该配置文件将拉取映像并将其部署在群集节点上。

apiVersion: v1
kind: pod
metadata:
   name: Tesing_for_Image_pull -----------> Name of Pod
      spec:
containers:
- name: neo4j-server ------------------------> Name of the image
image: ----------> Image to be pulled
imagePullPolicy: Always ------------->Image pull policy
command: [“echo”, “SUCCESS”] -------------------> Massage after image pull

为了从中拉出并创建图像,请运行以下命令。登录后,OC是与OpenShift环境进行通信的客户端。

$ oc create –f Tesing_for_Image_pull

容器

这是在Docker映像部署在OpenShift集群上时创建的。在定义任何配置时,我们在配置文件中定义容器部分。一个容器可以在内部运行多个映像,并且在群集节点上运行的所有容器都由OpenShift Kubernetes管理。

spec:
   containers:
   - name: py ------------------------> Name of the container
   image: python----------> Image going to get deployed on container
   command: [“python”, “SUCCESS”]
   restartPocliy: Never --------> Restart policy of container

以下是定义容器的规范,该容器内部有多个图像。

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
   - containerPort: 7500
      imagePullPolicy: Always
      -name: Database
      Image: mongoDB
      Ports:
      - containerPort: 7501
imagePullPolicy: Always

在上面的配置中,我们定义了一个多容器容器,其中包含Tomcat和MongoDB的两个映像。

豆荚和服务

豆荚

Pod可以定义为OpenShift(Kubernetes)集群节点内部的容器及其存储的集合。通常,我们有两种类型的容器,从单个容器容器到多容器容器。

单个容器容器-可以使用OC命令或基本配置yml文件轻松创建这些容器

$ oc run  --image = 

使用一个简单的yaml文件创建它,如下所示。

apiVersion: v1
kind: Pod
metadata:
   name: apache
spec:
   containers:
   - name: apache
   image: apache: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always

创建上述文件后,它将使用以下命令生成一个容器。

$ oc create –f apache.yml

多容器容器-多容器容器是其中我们有多个容器运行的容器。它们是使用yaml文件创建的,如下所示。

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always
   -name: Database
   Image: mongoDB
   Ports:
      - containerPort: 7501
imagePullPolicy: Always

创建这些文件之后,我们可以简单地使用与上述相同的方法来创建容器。

服务-由于我们有一组容器在容器中运行,因此以相同的方式,我们可以将服务定义为一组逻辑容器。它是Pod顶部的抽象层,它提供了一个IP和DNS名称,可以通过该IP和DNS名称访问Pod。服务有助于管理负载平衡配置并非常轻松地扩展Pod。在OpenShift中,服务是REST对象,其定义可以发布到OpenShift主服务器上的apiService上以创建新实例。

apiVersion: v1
kind: Service
metadata:
   name: Tutorial_point_service
spec:
   ports:
      - port: 8080
         targetPort: 31999

构建和流式传输

建物

在OpenShift中,构建是将图像转换为容器的过程。它是将源代码转换为图像的处理。该构建过程采用将源代码构建为映像的预定义策略。

构建过程处理多种策略和来源。

制定策略

  • 图像来源-基本上这是一个工具,可帮助构建可复制的图像。这些映像始终处于准备就绪状态,可以使用Docker run命令运行。

  • Docker构建-这是通过运行简单的Docker build命令使用Docker文件构建映像的过程。

  • 自定义构建-这些是用于创建基础Docker映像的构建。

建立来源

Git-当git存储库用于构建映像时,将使用此源。 Dockerfile是可选的。源代码中的配置如下所示。

source:
type: "Git"
git:
   uri: "https://github.com/vipin/testing.git"
   ref: "master"
contextDir: "app/dir"
dockerfile: "FROM openshift/ruby-22-centos7\nUSER example"

Dockerfile -Dockerfile用作配置文件中的输入。

source:
   type: "Dockerfile"
   dockerfile: "FROM ubuntu: latest
   RUN yum install -y httpd"

图像流-提取图像后创建图像流。图像流的优点是它会寻找图像新版本的更新。这用于比较由标签标识的任意数量的Docker格式化的容器映像。

创建新图像时,图像流可以自动执行操作。所有构建和部署都可以监视映像操作并相应地执行操作。以下是我们定义构建流的方式。

apiVersion: v1
kind: ImageStream
metadata:
   annotations:
      openshift.io/generated-by: OpenShiftNewApp
   generation: 1
   labels:
      app: ruby-sample-build
   selflink: /oapi/v1/namespaces/test/imagestreams/origin-ruby-sample
   uid: ee2b9405-c68c-11e5-8a99-525400f25e34
spec: {}
status:
   dockerImageRepository: 172.30.56.218:5000/test/origin-ruby-sample
   tags:
   - items:
      - created: 2016-01-29T13:40:11Z
      dockerImageReference: 172.30.56.218:5000/test/origin-apache-sample
      generation: 1
      image: vklnld908.int.clsa.com/vipin/test
   tag: latest

路线和模板

路线

在OpenShift中,路由是一种通过创建和配置外部可访问主机名将服务暴露给外部环境的方法。路由和端点用于将服务公开给外部世界,用户可以在其中使用名称连接(DNS)访问定义的应用程序。

在OpenShift中,使用OpenShift管理员在群集上部署的路由器创建路由。路由器用于将HTTP(80)和https(443)端口绑定到外部应用程序。

以下是路由支持的不同类型的协议-

  • HTTP
  • HTTPS
  • TSL和Web套接字

配置服务时,选择器用于配置服务并使用该服务查找端点。以下是如何使用适当的协议创建服务以及该服务的路由的示例。

{
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-Rservice"},
   "spec": {
      "selector": {"name":"RService-openshift"},
      "ports": [
         {
            "protocol": "TCP",
            "port": 8888,
            "targetPort": 8080
         }
      ]
   }
}

接下来,运行以下命令并创建服务。

$ oc create -f ~/training/content/Openshift-Rservice.json

创建后的服务就是这样。

$ oc describe service Openshift-Rservice

Name:              Openshift-Rservice
Labels:            
Selector:          name = RService-openshift
Type:              ClusterIP
IP:                172.30.42.80
Port:               8080/TCP
Endpoints:         
Session Affinity:  None
No events.

使用以下代码创建服务的路由。

{
   "kind": "Route",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-service-route"},
   "spec": {
      "host": "hello-openshift.cloudapps.example.com",
      "to": {
         "kind": "Service",
         "name": "OpenShift-route-service"
      },
      "tls": {"termination": "edge"}
   }
}

使用OC命令创建路由时,将创建路由资源的新实例。

范本

模板在OpenShift中定义为标准对象,可以多次使用。使用占位符列表对它进行参数化,该占位符用于创建多个对象。这可以用来创建任何东西,从Pod到网络,用户都有权为其创建。如果将图像中CLI或GUI界面中的模板上载到项目目录,则可以创建对象列表。

apiVersion: v1
kind: Template
metadata:
   name: 
   annotations:
      description: 
      iconClass: "icon-redis"
      tags: 
objects:
   - apiVersion: v1
   kind: Pod
   metadata:
      name: 
spec:
   containers:
      image: 
      name: master
      ports:
      - containerPort: 
         protocol: 
labels:
   redis: 

认证与授权

认证方式

在OpenShift中,在配置主服务器和客户端结构时,主服务器具有OAuth服务器的内置功能。 OAuth服务器用于生成令牌,该令牌用于对API进行身份验证。由于OAuth是master的默认设置,因此默认情况下,我们使用允许所有身份提供者。存在不同的身份提供者,可以在/etc/openshift/master/master-config.yaml中对其进行配置。

OAuth中存在不同类型的身份提供者。

  • 允许全部
  • 全部拒绝
  • HTPasswd
  • LDAP
  • 基本认证

允许全部

apiVersion: v1
   kind: Pod
   metadata:
      name: redis-master
   spec:
      containers:
         image: dockerfile/redis
         name: master
      ports:
      - containerPort: 6379
         protocol: TCP
      oauthConfig:
      identityProviders:
      - name: my_allow_provider
         challenge: true
         login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

全部拒绝

apiVersion: v1
kind: Pod
metadata:
   name: redis-master
spec:
   containers:
      image: dockerfile/redis
   name: master
   ports:
   - containerPort: 6379
      protocol: TCP
   oauthConfig:
   identityProviders:
   - name: my_allow_provider
      challenge: true
      login: true
   provider:
      apiVersion: v1
      kind: DenyAllPasswordIdentityProvider

HTPasswd

为了使用HTPasswd,我们需要首先在主计算机上设置Httpd工具,然后以与对其他机器相同的方式对其进行配置。

identityProviders:
   - name: my_htpasswd_provider
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider

授权书

授权是OpenShift主站的一项功能,用于验证用户身份。这意味着它将检查试图执行某项操作的用户,以查看该用户是否有权在给定的项目上执行该操作。这有助于管理员控制对项目的访问。

授权策略使用-

  • 规则
  • 的角色
  • 绑定

使用-完成授权评估-

  • 身分识别
  • 行动
  • 绑定

使用策略-

  • 集群政策
  • 当地政策