当前位置: 首页 > wzjs >正文

网页网站开发工具株洲seo优化推荐

网页网站开发工具,株洲seo优化推荐,网站建设九亭,会员播放系统插件wordpress一、前言 在K8S中可以通过service对外暴露服务,由service代表一组pod对外提供服务,同时也提供了通过Ingress-controller组件对外提供服务的方式,Ingress-controller类似于一个反向代理,前端向用户侧提供服务,后端将服…

一、前言

在K8S中可以通过service对外暴露服务,由service代表一组pod对外提供服务,同时也提供了通过Ingress-controller组件对外提供服务的方式,Ingress-controller类似于一个反向代理,前端向用户侧提供服务,后端将服务请求转发到每一个service上。而Ingress则在Ingress-controller的基础之上提供了一个用户配置规则的入口。K8S通过Ingress可以提供4层、7层的反向代理,同时具备了将服务绑定到证书上对外通过HTTPS提供安全服务的能力,本文主要记录通过Ingress提供HTTPS服务的配置。

二、组件与访问流程介绍

引入Ingress-controller后,如下图所示:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress-nginx

1) Ingress-controller是以容器的方式部署在K8S集群中,ingress-controller底层是以nginx、lvs等方式实现的,目前多选用nginx。

2) Ingress是为用户提供配置规则的一个入口,ingress-controller可以将该配置文件中的规则转换为nginx的规则。

3) Service与未引入ingress-controller时一样,只不过作为ingress中配置的后端服务,而不直接对外提供服务。

4) Secret:与etcd类似,用于在K8S中存储配置相关的信息的,所不同的是secret主要存储一些敏感信息,在该架构中,我们将HTTPS证书存储于secret中,并且在ingress中调用相关的信息。

访问流程:

用户向ingress-controller发起https请求,ingress-controller进行HTTPS证书卸载,并将请求向后端的backend进行转发,转到到某一个service上。

三、配置Ingress-controller提供HTTPS服务

(1)  部署ingress-controller

通过yml文件部署,可以参考github的官方说明,网址: https://github.com/kubernetes/ingress-nginx,可以看到有相关的版本说明:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_k8s_02

不过由于我的k8s版本为1.16,已经比较老旧了,没有找到完整的yml文件,我从网上相关博客搜索,配合文心一言,组合了一份完整的ingress.yml文件。

[root@k8s-master1 ingress]# cat ingress.ymlapiVersion: v1kind: Namespacemetadata:name: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

kind: ConfigMapapiVersion: v1metadata:name: nginx-configurationnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

kind: ConfigMapapiVersion: v1metadata:name: tcp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

---

kind: ConfigMapapiVersion: v1metadata:name: udp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

apiVersion: v1kind: ServiceAccountmetadata:name: nginx-ingress-serviceaccountnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

---

apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata:name: nginx-ingress-clusterrolelabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxrules:- apiGroups:- ""resources:- configmaps- endpoints- nodes- pods- secretsverbs:- list- watch- apiGroups:- ""resources:- nodesverbs:- get- apiGroups:- ""resources:- servicesverbs:- get- list- watch- apiGroups:- ""resources:- eventsverbs:- create- patch- apiGroups:- "extensions"- "networking.k8s.io"resources:- ingressesverbs:- get- list- watch- apiGroups:- "extensions"- "networking.k8s.io"resources:- ingresses/statusverbs:- update

 

---

apiVersion: rbac.authorization.k8s.io/v1beta1kind: Rolemetadata:name: nginx-ingress-rolenamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxrules:- apiGroups:- ""resources:- configmaps- pods- secrets- namespacesverbs:- get- apiGroups:- ""resources:- configmapsresourceNames:# Defaults to "<election-id>-<ingress-class>"# Here: "<ingress-controller-leader>-<nginx>"# This has to be adapted if you change either parameter# when launching the nginx-ingress-controller.- "ingress-controller-leader-nginx"verbs:- get- update- apiGroups:- ""resources:- configmapsverbs:- create- apiGroups:- ""resources:- endpointsverbs:- get

 

---

apiVersion: rbac.authorization.k8s.io/v1beta1kind: RoleBindingmetadata:name: nginx-ingress-role-nisa-bindingnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxroleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: nginx-ingress-rolesubjects:- kind: ServiceAccountname: nginx-ingress-serviceaccountnamespace: ingress-nginx

 

---

apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:name: nginx-ingress-clusterrole-nisa-bindinglabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: nginx-ingress-clusterrolesubjects:- kind: ServiceAccountname: nginx-ingress-serviceaccountnamespace: ingress-nginx

---

 

apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-ingress-controllernamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxspec:replicas: 1selector:matchLabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxtemplate:metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxannotations:prometheus.io/port: "10254"prometheus.io/scrape: "true"spec:serviceAccountName: nginx-ingress-serviceaccountcontainers:- name: nginx-ingress-controller#image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.25.0args:- /nginx-ingress-controller- --configmap=$(POD_NAMESPACE)/nginx-configuration- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services- --udp-services-configmap=$(POD_NAMESPACE)/udp-services- --publish-service=$(POD_NAMESPACE)/ingress-nginx- --annotations-prefix=nginx.ingress.kubernetes.iosecurityContext:allowPrivilegeEscalation: truecapabilities:drop:- ALLadd:- NET_BIND_SERVICE# www-data -> 33runAsUser: 33env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespaceports:- name: httpcontainerPort: 80- name: httpscontainerPort: 443livenessProbe:failureThreshold: 3httpGet:path: /healthzport: 10254scheme: HTTPinitialDelaySeconds: 10periodSeconds: 10successThreshold: 1timeoutSeconds: 10readinessProbe:failureThreshold: 3httpGet:path: /healthzport: 10254scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 10

 

---

 

apiVersion: v1 kind: Service metadata: name: ingress-nginx namespace: ingress-nginx spec: type: LoadBalancer# type: NodePortports: - name: http port: 80 targetPort: 80 protocol: TCP - name: https port: 443 targetPort: 443 protocol: TCP selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx

该文件中有几个关键的部分,包括namespace、configmap、serviceAccount、ClusterRole、Role、RoleBinding、ClusterRoleBing、Deployment、service。其中Deployment指定了nginx-ingress-controller镜像,用于将nginx-ingress-controller pod拉起,service则是用于将controller暴露出来。

执行kubectl create -f ingress.yml命令,可以看到相关的资源被创建,查看pod以及service的情况:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress-controller_03

看一下nginx-ingress-controller的详细情况:kubectl describe pod nginx-ingress-controller-74879f74c6-cgrn2 -n ingress-nginx

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress_04

可以看到该pod运行在k8s-worker2上面。

注意:上面创建ingress-controller的过程中,其Pod,Service均在ingress-nginx namespace中。

(2)  创建HTTPS需要使用的证书

证书需要与域名绑定,假设域名为 www.mytest.com,使用Openssl生成证书:

# openssl genrsa -out server.key

# openssl req -new -x509 -key server.key -out server.crt -subj "/O=www.mytest.com,/CN=www.mytest.com"

此时已经生成了server.crt以及server.key两个文件。

(3)  将证书写入secret中

[root@k8s-master1 test]# kubectl create secret tls ingress-nginx-secret --key=server.key --cert=server.crt

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_https_05

 (4)  创建后端的nginx服务

kubectl create deployment web --image=nginx:1.8

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_https_06

(5)  创建提供nginx pod服务的service

kubectl expose deployment web --port=80 --target-port=80 --type=NodePort

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress-nginx_07

配置步骤四、五后可以通过 http://192.168.2.153:31111/访问到nginx服务了,下一步配置ingress规则,通过ingress-controller提供服务,并且启用HTTPS。

(6)  创建ingress规则

编写Ingress的资源清单,mytest-ingress01.yaml[root@k8s-master1 BrowerCert]# cat mytest-ingress01.yamlapiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:name: mytest-https# namespace: ingress-nginxspec:tls:- hosts:- www.mytest.comsecretName: ingress-nginx-secretrules:- host: www.mytest.comhttp:paths:- path: /# pathType: Prefixbackend:serviceName: webservicePort: 80

资源清单中hosts:www.mytest.com为域名,secretName为保存在secret中的证书的名称,serviceName及servicePort为第五步创建的服务名称与80端口。

kubectl apply -f mytest-ingress01.yaml

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress-nginx_08

 (7)  测试

查看ingress-controller情况:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_k8s_09

在windows的hosts中配置域名:

192.168.2.154 

浏览器中测试:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_k8s_10

 四、问题排查

1) 最开始的时候访问,通过kubectl logs -f -n ingress-nginx nginx-ingress-controller-74879f74c6-cgrn2命令查看ingress-controller日志,提示找不到err services "ingress-nginx" not found。该问题研究了很久,后来发现ingress.yml文件中没有service资源清单,补充后未再报该错误,完整资源清单见第一步。

kubectl logs -f -n ingress-nginx nginx-ingress-controller-74879f74c6-cgrn2查看实时日志,当Namespace不对,日志中报错,找不到相应的key或者service:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_https_11

调整namespace后,在kubectl apply -f mytest-ingress01.yaml的时候可以看到后端服务向controller注册成功:

基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求_ingress-controller_12

2) nginx-ingress 报错 503 Service Temporarily Unavailable。要注意service、pod、ingress需要在相同的namespace中,本文是default;ingress-controller及其service是可以在其他namespace,本文是ingress-nginx。

五、总结

本文是基于k8s v1.16测试的ingress功能,配置了HTTPS对外提供服务。Ingress-controller可以主要用于负载均衡、反向代理,然而个人理解实际上是不适合配置HTTPS对外提供服务的,因为在实际的网络中,一定会部署IPS及WAF进行应用安全防护,因此需要在网络中对从用户发起的HTTPS请求进行SSL卸载转换为HTTP请求,然后才经过IPS/WAF的安全防护,否则设备可能不能识别流量中的异常行为。本文主要是熟悉在K8S中ingress-controller的功能,帮助在工作中遇到K8S进行安全评估。

 

最后我也整理了一些网络安全(黑客)方面的学习进阶资料

如果你想跟同道中人交流

http://www.dtcms.com/wzjs/355718.html

相关文章:

  • 现在做跨境电商还能赚钱吗网站优化排名
  • 包装盒在线设计网站淘宝关键词top排行榜
  • 电商网站制作教程外链工具
  • 优质校建设专题网站营销渠道方案
  • 厦门手机网站制作推广竞价的公司有哪些
  • 亚马逊美国站黑五网一时间已公布搜索广告优化
  • 温州网站公司沈阳seo排名优化教程
  • 网站拍照的幕布广州网站优化公司如何
  • 创业做社交网站杭州网站排名提升
  • 山东省住房和城乡建设厅副厅长广安网站seo
  • 产品商城网站建设bt磁力种子搜索引擎
  • 广州正佳广场品牌大全专业百度seo排名优化
  • 设计色彩网站淘宝关键词查询
  • 建设企业网站管理系统目的广告公司营销策划方案
  • 苏州制作企业网站公司磁力搜索器 磁力猫
  • 做网站用备案吗合肥seo推广公司哪家好
  • 网站建设哪里好免费软件下载网站有哪些
  • 网站安全建设方案步骤免费b站推广入口
  • 公司国际网站怎么做百度推广区域代理
  • 网站模板拍卖企业网站建设制作
  • 电商网站建设维护惠州企业网站seo
  • 做宠物商品的网站网站收录大全
  • 哪些网站用python做服务框架网站建设制作模板
  • 平台直播重庆seo网站运营
  • 怀化医保网站成都推广团队
  • 网站建设经费保障专业郑州企业网站建设
  • 获得网页源码怎么做网站营销咨询公司
  • 关于建设门户网站的请示服装品牌策划方案
  • 黄山自驾游最佳攻略seo黑帽技术有哪些
  • 山西网站制作设计百度地图推广电话