Kubernetes 部署 Traefik Ingress 控制器 (1.7.12)

目录[-]

  • . 一、Ingress 介绍
  • . 二、Traefik 介绍
  • . 三、部署 Ingress 控制器 Traefik
  • . 1、Traefik 两种部署方式介绍
  • . 2、创建 Traefik 配置文件
  • . 3、将 Traefik 配置文件挂载到 ConfigMap
  • . 4、设置 CA 证书
  • . 5、给节点设置 Label
  • . 6、创建 Traefik 服务账户与角色权限
  • . 7、创建 Traefik Ingress Controller
  • . 四、配置 Ingress 访问策略
  • . 1、Ingress 规则配置简介
  • . 2、创建 Traefik Dashboard Ingress

前言:

Ingress 可以为 Kubernetes 集群外部访问集群内部 Service 提供配置,Ingress Controller 控制器可以充当网关,提供路由策略、负载均衡流量、SSL,并提供基于名称的虚拟主机,提供统一的入口供流量涌入,是一个边缘路由器或额外的前端。这里使用 Traefik 来充当 Ingress Controller 控制器,下面将介绍如何在 Kubernetes 中部署 Traefik 这个过程。

Ingress 不会暴露任意端口或协议。将除 HTTP 和 HTTPS 之外的服务暴露给互联网通常使用 Service.Type = NodePort 或 Service.Type = LoadBalancer 类型的服务。

系统环境:

  • kubernetes 版本:1.14.0
  • traefik 版本:1.7.12

Github 示例部署文件

  • 部署文件 github 地址: https://github.com/my-dlq/blog-example/tree/master/kubernetes/traefik-v1.7-deploy

一、Ingress 介绍

对于基于 HTTP 的服务,不同的 URL 对应不同的后端服务或者虚拟服务器(Virtual Host),这些应用层的转发无法通过 Kubernetes Service 机制实现,所以从 Kubernetes 1.1 版本开始新增 Ingress 资源。Ingress 是一种将不同的URL的访问请求转发到不同的 Service 实现Http层业务路由机制。

Kubernetes Ingress 包含 Ingress 策略和 Ingress 控制器两部分组成,Ingress 策略是配置路由规则,而 Ingress 控制器则是将服务进行转发。Ingress Controller 基于 Ingress 规则将客户端请求转发到 Service 对应的后端 Endpoints(Pod) 上,这样会跳过 Kube-proxy 转发功能避免增加开销。

例如下图,展示了集群外部客户端通过 Ingress 地址访问集群,根据配置的 Ingress 规则,将所有访问 host 为 www.mydlq.club ,且 path 为 “/test” 或者 “/dev” 的外部流量转发到对应的 Pod 上。

 

二、Traefik 介绍

Traefik 是一个轻松与微服务配合且流行的 HTTP 反向代理和负载均衡器。Traefik 与现有的基础架构组件(如 Docker、Swarm、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS ……)集成,并自动动态配置。在你的控制器上指向 Traefik 应该是你唯一需要配置的步骤。

 

三、部署 Ingress 控制器 Traefik

在定义 Ingress 之前我先首先拥有 Ingresss 控制器,以实现为后端所有服务统一入口。Ingresss 控制器也是以 Pod 形式运行在 Kubernetes 集群中,监控 API Server 的 /ingress 接口后端的backend services,如果 Service 发送变化,则 Ingress 控制器将自动更新其转发规则,下面我们开始部署 Traefik 到 Kubernetes 集群。

步骤简介:

  • (1)、创建 Traefik 配置文件,并将其以 ConfigMap 方式挂载到 Kubernetes 集群中。
  • (2)、生成 CA 证书,并将其以 Secret 方式挂载到 Kubernetes 集群中。
  • (3)、创建 Traefik Label 设置到 Kubernetes 节点(相当于设置了 Label 的节点是 Ingress 入口)。
  • (4)、创建 Traefik ServiceAccount 以提供 Traefik 一定权限。
  • (5)、创建 Traefik 控制器。

1、Traefik 两种部署方式介绍

在 Kubernetes 下有两种部署 Kubernetes 的方式:

  • Deployment
  • DeamonSet

两种部署方式的区别:

在 Kubernetes 利用 DaemonSet 方式部署的应用会在设置对应 Label 的 Kubernetes 节点上部署一个 Pod,每当新增 Kubernetes 节点后只要对新增的 Kubernetes 节点设置对应 Label 就可将 Traefik 扩展到该节点。但是也是因为如此,一个节点只能启用一个 Pod,这样对于 Traefik 的扩展非常不利,如果将外部流量大量指向某个节点,那么很可能会致使该节点的 Traefik 崩溃,但也是非常方便限制两个 Traefik Pod 起在不在同一节点上。使用 Deployment 方式的部署方式一般是部署无状态应用的,所以通过这种方式能够很轻松的扩展 Traefik 应用副本数。

如果用 DaemonSet 方式部署 Traefik 就可与使用该 “NET_BIND_SERVICE” 功能,这将允许它绑定到每个主机上的 80/443/etc 端口。这将允许绕过 kube-proxy,并减少流量跳跃。而 Deployment 这种部署方式是通过 kube-proxy 代理将流量转发到 Traefik,所以可以利用集群中所有节点的 IP 地址访问 Traefik,但是每新增一个 Kubernetes 节点后,如果想在该节点上设置 Traefik ,那么必须更改 Traefik Deployment 配置,增加副本数且使其在新节点上调度。

所以两种部署方式区别大概如下:

  • DaemonSet 方式能够确定有哪些节点在运行 Traefik,可以确定的知道后端 IP,但是不能方便的伸缩。 Deployment 可以方便的伸缩,但是不能确定有哪些节点在运行 Traefik ,所以不能确定的知道后端 IP。
  • 使用 Deployment 时可伸缩性可以更好,DaemonSet 方式在新增节点时更易扩展。
  • DaemonSet 确保每个节点只有一个 Traefik Pod 在运行。而 Deployment 可以有多个副本。如果要确保两个pod不在同一节点上,则可以设置成Deployment。
  • DeamonSet 可以使用 “NET_BIND_SERVICE” 功能,这将允许它绑定到每个主机上的端口 80/443/etc。这将允许绕过kube-proxy,并减少流量跳跃。

这两张方式可以根据自己的需求选择其一即可。这里将介绍如何通过 DaemonSet 方式部署 Traefik Ingress。

2、创建 Traefik 配置文件

为了方便配置 Traefik,一般情况下将 Traefik 配置文件放置到容器外,这里以 ConfigMap 方式将配置文件存入 Kubernetes 集群,然后通过挂载方式将 ConfigMap 挂入 Traefik 容器中。

创建 traefik.toml 文件

traefik.toml

# traefik.toml
debug = true
InsecureSkipVerify = true
defaultEntryPoints = ["http","https"]
[entryPoints][entryPoints.http]address = ":80"compress = true[entryPoints.https]address = ":443"compress = true[entryPoints.https.tls][[entryPoints.https.tls.certificates]]CertFile = "/ssl/tls.crt"KeyFile = "/ssl/tls.key"[entryPoints.traefik]address = ":8080"
[kubernetes]
[traefikLog]format = "json"#filePath = "/data/traefik.log"
[accessLog]#filePath = "/data/access.log"format = "json"[accessLog.filters]retryAttempts = trueminDuration = "10ms"[accessLog.fields]defaultMode = "keep"[accessLog.fields.names]"ClientUsername" = "drop"[accessLog.fields.headers]defaultMode = "keep"[accessLog.fields.headers.names]"User-Agent" = "redact""Authorization" = "drop""Content-Type" = "keep"
[api]entryPoint = "traefik"dashboard = true
  • Traefik 配置文件中设置该 Traefik Ingress 允许以 HTTP、HTTPS 方式进入;
  • 设置 SSL 统一的 CA 证书文件地址为“/ssl/tls.crt”,“/ssl/tls.key”方便后续通过 ConfigMap 方式将 CA 证书文件挂入其中。

3、将 Traefik 配置文件挂载到 ConfigMap

  • n 指定程序启的 Namespace
  • --from-file 读取文件生成 ConfigMap
$ kubectl create configmap traefik-config --from-file=./traefik.toml -n kube-system

4、设置 CA 证书

这里设置 Traefik 统一的 CA 证书文件,如果已经有拥有认证的证书文件可以直接拿来用,或者也可以用 openssl 程序生成自签名证书。

生成自签名 CA 证书

openssl 工具生成 CA 自签名的证书

$ openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 9999 -out tls.crt

生成 secret 到 Kubernetes

$ kubectl create secret generic traefik-ui-tls-cert --from-file=tls.crt --from-file=tls.key -n kube-system

5、给节点设置 Label

由于是 Kubernetes DeamonSet 这种方式部署 Traefik,所以需要提前给节点设置 Label,这样当程序部署时 Pod 会自动调度到设置 Label 的点上。

节点设置 Label 标签

  • 格式:kubectl label nodes [节点名] [key=value]
$ kubectl label nodes k8s-master-2-11 IngressProxy=true

查看节点是否设置 Label 成功

$ kubectl get nodes --show-labelsNAME            STATUS ROLES  VERSION  LABELS
k8s-master-2-11 Ready  master v1.14.0  IngressProxy=true,kubernetes.io/hostname=k8s-master-2-11,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node-2-12   Ready  <none> v1.14.0  kubernetes.io/hostname=k8s-node-2-12,storagenode=glusterfs
k8s-node-2-13   Ready  <none> v1.14.0  kubernetes.io/hostname=k8s-node-2-13,storagenode=glusterfs
k8s-node-2-14   Ready  <none> v1.14.0  kubernetes.io/hostname=k8s-node-2-14,storagenode=glusterfs

可以看到已经设置上了 Label

6、创建 Traefik 服务账户与角色权限

Kubernetes 在 1.6 版本中引入了基于角色的访问控制(RBAC)策略,方便对 Kubernetes 资源和 API 进行细粒度控制。所以这里提前创建好 Traefik ServiceAccount 并分配一定的权限。

创建 traefik-rbac.yaml 文件

traefik-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: traefik-ingress-controllernamespace: kube-system---kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: traefik-ingress-controller
rules:- apiGroups: [""]resources: ["services","endpoints","secrets"]verbs: ["get", "watch", "list"]  - apiGroups: ["extensions"]resources: ["ingresses"]verbs: ["get", "watch", "list"]  - apiGroups: ["extensions"]resources: ["ingresses/status"]verbs: ["update"]  ---kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: traefik-ingress-controller
subjects:
- kind: ServiceAccount  name: traefik-ingress-controllernamespace: kube-system
roleRef:kind: ClusterRolename: traefik-ingress-controllerapiGroup: rbac.authorization.k8s.io

创建 Traefik RBAC

$ kubectl apply -f traefik-rbac.yaml

7、创建 Traefik Ingress Controller

创建 traefik.yaml 文件

这里设置部署 Traefik 的 yaml 文件,里面包含 Traefik 的 Service 和 DaemonSet。Service 里面需要设置三个端口,分别为 80、443、8080,这三个端口分别对应 http端口、https端口、traefik admin控制台端口。DaemonSet 里面设置容器也暴露三个端口,其中 “80/443” 是使用特权端口的守护进程,阐述了静态(非NodePort)hostPort 绑定,这样相当于暴露当前 Traefik Pod 所在节点 IP,外部流量能通过该节点 IP 进入 Traefik Ingress。而 8080 是供 Traefik Dashboard 用的控制台端口,可以通过该端口访问 Traefik 控制台。

例如这里设置 Traefik 启动到 “k8s-master-2-11”,此节点的 IP 为 “192.168.2.11” ,这样外部想通过 Traefik Ingress 访问集群服务,必须通过该 IP 地址而不应通过 Kubernetes 集群 IP,相当于该节点充当了 Kubernetes 入口。

traefik.yaml

kind: Service
apiVersion: v1
metadata:name: traefik-ingress-servicenamespace: kube-system
spec:selector:k8s-app: traefik-ingress-lbports:- protocol: TCPport: 80name: http- protocol: TCPport: 443name: https- protocol: TCPport: 8080name: admin---apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:name: traefik-ingress-controllernamespace: kube-systemlabels:k8s-app: traefik-ingress-lb
spec:template:metadata:labels:k8s-app: traefik-ingress-lbname: traefik-ingress-lbspec:serviceAccountName: traefik-ingress-controllerterminationGracePeriodSeconds: 60containers:- image: traefik:1.7.12name: traefik-ingress-lbports:- name: httpcontainerPort: 80hostPort: 80                   #hostPort方式,将端口暴露到集群节点- name: httpscontainerPort: 443hostPort: 443                  #hostPort方式,将端口暴露到集群节点- name: admincontainerPort: 8080securityContext:capabilities:drop:- ALLadd:- NET_BIND_SERVICEargs:- --api- --kubernetes- --logLevel=INFO- --configfile=/config/traefik.tomlvolumeMounts:- mountPath: "/ssl"name: "ssl"- mountPath: "/config"name: "config"volumes:- name: sslsecret:secretName: traefik-ui-tls-cert- name: configconfigMap:name: traefik-config tolerations:              #设置容忍所有污点,防止节点被设置污点- operator: "Exists"nodeSelector:             #设置node筛选器,在特定label的节点上启动IngressProxy: "true"

部署 Traefik

$ kubectl apply -f traefik.yaml

查看 Traefik 资源

$ kubectl get daemonset,service,pod -o wide -n kube-systemNAME                                            DESIRED CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR     CONTAINERS          IMAGES         
daemonset.extensions/traefik-ingress-controller 1       1        1      1           1          IngressProxy=true traefik-ingress-lb  traefik:1.7.12  
------------------------------------------------------------------------------------------------------------------------------------------------------
NAME                            TYPE      CLUSTER-IP    EXTERNAL-IP PORT(S)                 SELECTOR
service/traefik-ingress-service ClusterIP 10.10.114.105 <none>      80/TCP,443/TCP,8080/TCP k8s-app=traefik-ingress-lb
------------------------------------------------------------------------------------------------------------------------------------------------------
NAME                                  READY STATUS   RESTARTS IP          NODE             NOMINATED NODE READINESS GATES
pod/traefik-ingress-controller-8rzwt  1/1   Running  3        10.20.0.29  k8s-master-2-11  <none>         <none>

到这里 Traefik 控制器已经部署完成,下面将同过暴露 Traefik Dashboard Ingres 来进行 Igress 配置示例。

四、配置 Ingress 访问策略

1、Ingress 规则配置简介

一个常规的路由策略如下所示,这里根据注解详细描述 Ingress 访问配置。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: test-ingress                            #Ingress 资源名称annotations:kubernetes.io/ingress.class: traefik        #指定用 traefik 控制器,如果为 nginx 控制器则设置为 nginx
spec:rules:- host: cloud.mydlq.club                      #设置 host 匹配规则,外部流量访问该 host 时候进行代理操作http:paths:- path: /traefik                          #设置 path,当 host 匹配后进行 path 匹配,根据 path 不同转发不同的服务 backend:serviceName: traefik-ingress-service  #设置 service 名称,和要跳转的 service 一致servicePort: 8080                     #设置 service 端口

2、创建 Traefik Dashboard Ingress

上面部署的 Traefik 控制器默认有控制台服务,即 Traefik Service 的 8080 端口。

这里配置一个 Ingress, 将这个 Dashboard 设置域名为 http://cloud.mydlq.club/traefik 暴露出去,其它服务也是类似这种方法将 Service 暴露出去。

创建 traefik-dashboard-ingress.yaml 文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: traefik-dashboardnamespace: kube-systemannotations:kubernetes.io/ingress.class: traefik                        #指定用 traefik 控制器traefik.frontend.rule.type: PathPrefixStrip                 #跳转后端时忽略 pathtraefik.ingress.kubernetes.io/frontend-entry-points: http   #指定只能以 http,方式访问,也可以设置 https
spec:rules:- host: cloud.mydlq.club                                      #设置 hosthttp:paths:- path: /traefik                                          #设置 pathbackend:serviceName: traefik-ingress-service                  #设置 service 名称,和要跳转的 service 一致servicePort: 8080                                     #设置 service 端口

创建 Traefik Dashboard Ingress

$ kubectl apply -f traefik-dashboard-ingress.yaml

查看 Ingress

$ kubectl describe ingress traefik-dashboard -n kube-systemName:             traefik-dashboard
Namespace:        kube-system
Address:          
Default backend:  default-http-backend:80 (<none>)
TLS:SNI routes 
Rules:Host              Path  Backends----              ----  --------cloud.mydlq.club  /traefik   traefik-ingress-service:8080 (10.20.0.29:8080)
Annotations:kubernetes.io/ingress.class:                          traefiktraefik.frontend.rule.type:                           PathPrefixStriptraefik.ingress.kubernetes.io/frontend-entry-points:  http
Events:                                                 <none>

设置 Host 映射

客户端想通过域名访问服务,必须要进行DNS解析,由于这里没有 DNS 服务器进行域名解析,所以修改 hosts 文件将 Traefik 指定节点的 IP 和自定义 host 绑定。

$ vi /etc/hosts

添加下面内容:

192.168.2.11  cloud.mydlq.club

通过域名访问 Traefik Dashboard

访问地址 http://cloud.mydlq.club/traefik 查看 Traefik 控制台。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android (cocos2dx 网络访问)访问权限设置

Android开发应用程序时&#xff0c;如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: 同样的如果用到其它的权限&#xff0c;也需要作出声明,部分权限列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在 checki…

获取页面所有属性并生成html6,JavaScript基础练习题(三)

一、单选题1.以下关于Javascript中事件的描述中&#xff0c;不正确的是A click——鼠标单击事件B focus——获取焦点事件C mouseover——鼠标指针移动到事件源对象上时触发的事件D change——选择字段时触发的事件正确答案: D解析:change事件为input内容发生改变时触发的事件。…

Git本地缓存问题 修改密码后git无法拉取

Git本地缓存问题 修改密码后git无法拉取 问题描述&#xff1a;使用正确的用户名和密码可以登录到Git代码仓库&#xff0c;但是在本地无法使用Git bash命令行的方式拉取代码。 问题原因&#xff1a;第一次使用Git bash方式拉取代码时&#xff0c;会根据当前的用户和密码生成一串…

Ext.Net常用方法

1、js&#xff08;Ext&#xff09;操作 Ext.Msg.alert(系统提示, 未连接血站&#xff0c;该功能暂时不能使用。); Ext.getCmp("id").getValue();Ext.getCmp("id").focus();Ext.getCmp("id").selectText(); //选中修改 if (!GridPanel1.hasSelec…

表单 单击怪异事件

<input class"big" name"gohome" type"button" id"gohome" value"回到主页" οnclick"gohome()" /> 如果上面的name、ID属性跟后面的单击事件所调用的函数名一样。则无效&#xff01;&#xff01;&#xff…

Pytorch 版YOLOV5训练自己的数据集

1、环境搭建 https://github.com/ultralytics/yolov5 2、安装需要的软件 pip install -U -r requirements.txt 3、准备数据 在data文件下建立上面三个文件&#xff08;Annotations、images与ImageSets&#xff0c;labels后续我们脚本生成&#xff09;其中Annotations存放xml…

使用SQL Server作业设置定时任务

1.开启SQL Server Agent服务 使用作业需要SQL Agent服务的支持&#xff0c;并且需要设置为自动启动&#xff0c;否则你的作业不会被执行。 以下步骤开启服务:开始-->>>运行-->>>输入"services.msc"-->>>进入服务,开启SQL Server Agent服…

ListView与GridView优化

前言 ListView是Android中最常用的控件&#xff0c;通过适配器来进行数据适配然后显示出来&#xff0c;而其性能是个很值得研究的话题。本文与你一起探讨Google I/O提供的优化Adapter方案&#xff0c;欢迎大家交流。 声明 欢迎转载&#xff0c;但请保留文章原始出处:) 博客园&…

2021安徽舒城中学高考成绩查询,2021安徽省地区高考成绩排名查询,安徽省高考各高中成绩喜报榜单...

怀宁中学芜湖2017年芜湖市高考文科头名是来自于芜湖师大附中的唐逸云&#xff0c;高考成绩653分。2017年芜湖市高考理科头名是来自于芜湖师大附中的茅志鹏&#xff0c;高考成绩676分。师大附中芜湖一中淮南淮南二中文科考生最高分631(市应届生第一名)&#xff0c;理科考生最高分…

CentOS7挂载nfs盘快速指南

A服务器做服务端&#xff1a; 1、安装nfs相关软件&#xff0c;实际上是基于rpc协议的 yum install -y nfs-utils rpcbind2、设置共享目录 mkdir -p /data/vi /etc/exports/data 192.168.139.71(rw,async,no_root_squash)#rw(来访者的权限&#xff0c;rw表示可读写&#xff0…

带毫秒的字符转换成时间(DateTime)格式的通用方法

C#自身有更好的方式&#xff0c;Net任意String格式转换为DateTime类型 原文 好久没更新日志了&#xff0c;添加个方法吧&#xff0c;本身没有什么技术可言&#xff0c;为了能方便大家&#xff0c;我稍微整理一下咯~ 带毫秒的字符转换成时间&#xff08;DateTime&#xff09…

陕西省2021年高考成绩结果查询,陕西招生考试信息网:2021年陕西高考成绩查询入口、查分系统...

【摘要】为了方便陕西高考考生能及时查询到2021年高考成绩&#xff0c;高考频道特别整理了的陕西招生考试信息网2021年陕西高考成绩查询入口、查分系统&#xff0c;考生可在成绩公布时直接点击下面的链接进行查分&#xff0c;预祝大家金榜题名&#xff01;自陕西招生考试信息网…

SpringBoot 2.3.x 分层构建 Docker 镜像实践

目录[-] . 一、什么是镜像分层. 二、SpringBoot 2.3.x 新增对分层的支持. 三、创建测试的 SpringBoot 应用. 1、Maven 中引入相关依赖和插件. 2、创建测试的 Controller 类. 3、创建 SpringBoot 启动类. 四、创建两种构建镜像的 Dockerfile 脚本. 1、普通镜像构建脚本文件 doc…

Net任意String格式转换为DateTime类型

方式一&#xff1a;Convert.ToDateTime(string) Convert.ToDateTime(string) 注意&#xff1a;string格式有要求&#xff0c;必须是yyyy-MM-dd hh:mm:ss 方式二&#xff1a;Convert.ToDateTime(string, IFormatProvider) DateTimeFormatInfo dtFormat new System.Globalizatio…

jsonp的简单学习

前言&#xff1a;说到AJAX就会不可避免的面临两个问题&#xff0c;第一个是AJAX以何种格式来交换数据&#xff1f;第二个是跨域的需求如何解决&#xff1f;这两个问题目前都有不同的解决方案&#xff0c;比如数据可以用自定义字符串或者用XML来描述&#xff0c;跨域可以通过服务…

win7台式计算机怎么连热点,怎么用台式电脑开热点,电脑怎么开热点win7

导读&#xff1a;手机是每个人的随身携带之物&#xff0c;手机的功能让越来越多的人痴迷其中&#xff0c;也正是因为这个原因&#xff0c;手机流量的消耗也越来越多&#xff0c;购买流量让我们花费了很多金钱&#xff0c;我们该如何解决这个问题呢?下面我们就一起来看看电脑的…

Jenkins 与 Kubernetes 的 CI 与 CD Git + Maven + Docker+Kubectl

目录[-] . 一、Kubernetes 部署 Jenkins. 1、NFS 存储卷创建 Jenkins 目录. 2、创建 Jenkins 用于存储的 PV、PVC. 3、创建 ServiceAccount & ClusterRoleBinding. 4、创建 Service & Deployment. 5、获取 Jenkins 生成的 Token. 6、启动 Jenkins 进行初始化. 二、Jen…

WebLogic11g-创建域(Domain)及基本配置

2019独角兽企业重金招聘Python工程师标准>>> 最近看到经常有人提问weblogic相关问题&#xff0c;所以闲暇之际写几篇博文&#xff08;基于weblogic11&#xff09;&#xff0c;仅供大家参考。 具体weblogic的介绍以及安装&#xff0c;这里就不赘述了。 以域的创建开篇…

Asp.Net回车键触发Button的OnClick事件解决方案

在aspx页面有textbox文本框&#xff0c;还有三个button按钮。启用textbox的TextChanged事件和button的click事件。 问题&#xff1a; 现在在textbox文本框输入完数据按“回车”后&#xff0c;会触发TextChanged事件&#xff0c;但同时还会触发该页面第一个button按钮的Click事…