k8s之ingress反向代理pod
Ingress controller
Nginx -->后来改造
Traefik -->也是用于微服务
Envoy -->微服务
Ingress资源
目前使用0.17.1版本ingress-nginx
ingress定义 后端pod发生变化,service就变化,service变化ingress就发生变化,ingress再把变化注入到ingress-nginx-controller主容器的nginx的backend反向代理配置且重载配置文件使之能够动态改变反向代理配置
kubectl explain ingress
kubectl explain ingress.spec
kubectl explain ingress.spec.rules
kubectl explain ingress.spec.rules.http
kubectl explain ingress.spec.backend 关联后端
在github上下载ingress nginx
yum install git -y
kubectl create namespace env 创建名称空间
kubectl get ns
kubectl delete ns env 删除名称空间
需要用到的文件
namespace.yaml
rbac.yaml
with-rbac.yaml
configmap.yaml
udp-services-configmap.yaml
tcp-services-configmap.yaml
下载镜像:
docker pull googlecontainer/defaultbackend:1.4
docker tag docker.io/googlecontainer/defaultbackend:1.4 gcr.io/google_containers/defaultbackend:1.4
docker pullibmcom/nginx-ingress-controller:0.23.0
1.先创建namespace
kubectl apply -f namespace.yaml
然后其他一起创建
kubectl create -f ./
2.或者使用一键部署
kubectl create -f mandatory.yaml
查询是否在下载ingress镜像
kubectl get pods -n ingress-nginx
kubectl explain ingress.spec
cp deploy-demo.yaml ../ingress-nginx/
vim deploy-demo.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: default
spec:
selector:
app: myapp
release: canary
ports:
- name: http
targetPort: 80 容器端口
port: 80 service端口
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy 控制器名
namespace: default
spec:
replicas: 3 3个副本
selector:
matchLabels: 匹配标签
app: myapp
release: canary
template:
metadata:
labels: 定义pod标签
app: myapp
release: canary
spec:
containers:
- name: myapp 容器名
image: ikubernetes/myapp:v2
ports:
- name: http
containerPort: 80 容器端口
kubectl apply -f deploy-demo.yaml 先创建pods和svc
kubectl get pods
kubectl get svc
kubectl describe pods nginx-ingress-controller-589b9b8c9d-7mkng -n ingress-nginx 查看为什么下载不成功 -n 指定名称空间
创建 service-nodeport
cat 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 service类型为nodeport
ports:
- name: http
nodePort: 30080 node端口
port: 80 service端口
targetPort: 80 pod端口
protocol: TCP
- name: https
nodePort: 30443
port: 443
targetPort: 443
protocol: TCP
selector: 指定ingress-ningx-controller 主容器标签
app: ingress-nginx
kubectl apply -f service-nodeport.yaml
kubectl get svc -n ingress-nginx 查询创建是否成功
开放服务 创建ingress控制把服务放出去,同步pod的nginx配置文件
vim ingress-myapp.yaml
apiVersion: extensions/v1beta1
kind: Ingress 类型
metadata:
name: ingress-myapp
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx" 指定的控制器类ingress 叫 nginx 生成匹配规则
spec:
rules: 规则
- host: myapp.baidu.com 指定外部访问的host域名
http:
paths: 转发路径
- path:
backend: 指定backend反向代理
serviceName: myapp-service 转发的service
servicePort: 80 转发的service port
kubectl apply -f service-nodeport.yaml
查询创建是否成功
kubectl get ingress
查看详细信息
kubectl describe ingresses
创建成功,自动注入ingress-nginx-controller主容器,即自动转换成nginx配置文件
进入ingress-nginx-controller 检查
kubectl exec -n ingress-nginx -it nginx-ingress-controller-5dc4979fb6-nfvvt -- /bin/sh
cat nginx.conf 看是否已经写入配置信息
访问测试:
node绑定 hosts
https://myapp.com:30080
ssl证书:
openssl genrsa -out tls.key 2048
私钥:tls.key
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=devops/CN=myapp.com
自签证书:tls.crt
kubectl create secret tls myapp-ingress-secret --cert=tls.crt --key=tls.key
注入到k8s
kubectl get secrets
查询是否创建secret
kubectl describe secrets myapp-ingress-secret
kubectl explain ingress.spec
kubectl explain ingress.spec.tls
cp ingress-myapp.yaml ingress-myapp-tls.yaml
vim ingress-myapp-tls.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-myapp-tls
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- myapp.baidu.com
secretName: myapp-ingress-secret
rules:
- host: myapp.baidu.com
http:
paths:
- path:
backend:
serviceName: myapp-service
servicePort: 80
创建ingress
kubectl apply -f ingress-myapp-tls.yaml
kubectl get ingress
kubectl describe ingress ingress-myapp-tls
查看主容器配置文件,有443监听
kubectl exec -n ingress-nginx -it nginx-ingress-controller-5dc4979fb6-nfvvt -- /bin/sh
结果:listen 443 ssl http2;
访问测试:
node绑定 hosts
https://myapp.com:30443
数据流向 外部--> service_nodeport --> service --> pod_network
Ingress控制ingress-ningx-controller主容器进行反向代理
k8s之ingress反向代理pod的更多相关文章
- 详解k8s组件Ingress边缘路由器并落地到微服务 - kubernetes
写在前面 Ingress 英文翻译 进入;进入权;进食,更准确的讲就是入口,即外部流量进入k8s集群必经之口.这到大门到底有什么作用?我们如何使用Ingress?k8s又是如何进行服务发现的呢?先看一 ...
- 初试 Kubernetes 集群中使用 Traefik 反向代理
初试 Kubernetes 集群中使用 Traefik 反向代理 2017年11月17日 09:47:20 哎_小羊_168 阅读数:12308 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- (转)详解k8s组件Ingress边缘路由器并落地到微服务 - kubernetes
转:https://www.cnblogs.com/justmine/p/8991379.html 写在前面 Ingress 英文翻译 进入;进入权;进食,更准确的讲就是入口,即外部流量进入k8s集群 ...
- k8s系列---ingress资源和ingress-controller
https://www.cnblogs.com/zhangeamon/p/7007076.html http://blog.itpub.net/28916011/viewspace-2214747/ ...
- 容器编排系统k8s之Ingress资源
前文我们了解了k8s上的service资源的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14161950.html:今天我们来了解下k8s上的In ...
- k8s之ingress及ingress controller
1.ingress概述 图解:第一个service起到的作用是:引入外部流量,也可以不用此方式,以DaemonSet控制器的方式让Pod共享节点网络,第二个service的作用是:对后端pod分组,不 ...
- Kubernetes K8S之Ingress详解与示例
K8S之Ingress概述与说明,并详解Ingress常用示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- K8S部署超过节点的Pod
在阿里云上部署了一个K8S集群,一master, 两node: 然后执行 kubectl create -f tomcat.yml yaml如下: apiVersion: apps/v1 kind: ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- K8s中的多容器Pod和Pod内容器间通信
容器(Container)常被用来解决比如微服务的单个问题,但在实际场景中,问题的解决往往需要多容器方案.本文会讨论将多个容器整合进单个Kubernetes Pod 中,以及Pod中的容器之间是如何通 ...
随机推荐
- 牛客题解 | 单组_spj判断YES与NO
题目 题目链接 解题思路 后台有spj代码,能对同学们的输出数据进行校验,符合条件即可通过. 附赠 spj 代码 #include <iostream> #include <fstr ...
- 盘点10个.NetCore实用的开源框架项目
连续分享.Net开源项目快3个月了,今天我们一起梳理下10个,比较受到大家欢迎的.NetCore开源框架项目. 更多开源项目,可以查看我创建的,.Net开源项目榜单! 一个专注收集.Net开源项目的榜 ...
- gdfs: 基于Fuse的GoogleDrive客户端开源代码分析
背景 在学习fuse的过程中,首先从libfuse中的demo开始学习,以了解用户态与内核态通信的框架.而此处的demo只聚焦于最基本的通信,用户态文件系统的实现只是一个最简单的read only文件 ...
- Spark - 面试题
Spark是什么?答案:Apache Spark是一个快速.通用的大数据处理引擎,它提供了大规模数据集的内存计算和分布式计算能力.Spark可以处理各种数据源,如HDFS.Hive.Cassandra ...
- 大数据之路Week10_day04 (Hbase的二级索引,二级索引的本质就是建立各列值与行键之间的映射关系)
二级索引的本质就是建立各列值与行键之间的映射关系 HBASE是在hadoop之上构建非关系型,面向列存储的开源分布式结构化数据存储系统. Hbase的局限性: HBase本身只提供基于行键和全表扫描的 ...
- php禁止跨域调用api(来自文心快码)
在PHP中,禁止跨域调用API通常涉及到设置正确的HTTP响应头,以告知浏览器不允许来自不同源的请求.跨域资源共享(CORS)是一个W3C标准,它允许服务器放宽同源策略(SOP),从而允许某些跨站请求 ...
- C# 私钥加密,公钥解密
/// <summary> /// RSA加密的密匙结构 公钥和私匙 /// </summary> public struct RSAKey { public string P ...
- Caused by: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String 解决办法
使用MyBatis 更新数据库数据的时候 遇到了这个错误: Caused by: java.lang.IllegalArgumentException: invalid comparison: jav ...
- Qt修改exe文件图标
修改Qt生成exe的图标以及软件标题图标 目录 修改Qt生成exe的图标以及软件标题图标 简介 QtCreator下添加exe图标 直接添加.ico 通过.rc文件修改 Visual Studio下添 ...
- 【Linux】5.5 Shell运算符
Shell运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现 ...