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

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

查询是否注入

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主容器进行反向代理

原文地址:https://www.cnblogs.com/leiwenbin627/p/11306416.html

时间: 2024-09-30 12:16:36

k8s之ingress方向代理pod的相关文章

k8s部署ingress及http、https-实战篇

一.简介ingress:ingress-nginx #用于实现反代https://kubernetes.github.io/ingress-nginx/deploy/#generic-deployment kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yamlhttps://kubernetes.github.io/ingress-nginx/

nginx 方向代理 通过变量代理多个服务

配置如下 server {     listen       80;     server_name  xxxxxxxx;     access_log   /var/log/nginx/inetrnal_access.log  main;     proxy_set_header   Host             $host;     proxy_set_header   X-Real-IP        $remote_addr;     proxy_connect_timeout   

(转)详解k8s组件Ingress边缘路由器并落地到微服务 - kubernetes

转:https://www.cnblogs.com/justmine/p/8991379.html 写在前面 Ingress 英文翻译 进入;进入权;进食,更准确的讲就是入口,即外部流量进入k8s集群必经之口.这到大门到底有什么作用?我们如何使用Ingress?k8s又是如何进行服务发现的呢?先看一张图: 备注:此图来源我转载的一篇博客NodePort,LoadBalancer还是Ingress?我该如何选择 - kubernetes,特此说明. 原理 虽然k8s集群内部署的pod.server

k8s的ingress使用

ingress 可以配置一个入口来提供k8s上service从外部来访问的url.负载平衡流量.终止SSL和提供基于名称的虚拟主机. 配置ingress的yaml: 要求域名解析无误 要求service对应的pod正常 一.test1.domain.com   -->  service1:8080 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress namespace: test spec: rule

K8s Nginx Ingress 介绍

作者:漠然,原文发布于2017年3月4日,原文链接 一.Ingress 介绍 Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service.NodePort Service.Ingress:前两种估计都应该很熟悉,具体的可以参考下这篇文章:下面详细的唠一下这个 Ingress . 1.1.Ingress 是个什么玩意 可能从大致印象上 Ingress 就是能利用 Nginx.Haproxy 啥的负载均衡器暴露集群内服务的工具:那么问题来了,集群内服务想要暴露出去面临着

深入玩转K8S之利用Label控制Pod位置

首先介绍下什么是Label? Label是Kubernetes系列中一个核心概念.是一组绑定到K8s资源对象上的key/value对.同一个对象的labels属性的key必须唯一.label可以附加到各种资源对象上,如Node,Pod,Service,RC等. 通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作. 默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些实际情况我们

k8s通过label来控制pod的位置

默认情况下,scheduler会将pod调度到所有可用的Node,不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node:或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上. kubernetes通过label来实现这个功能 label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性.比如执行如下命令标注 k8s-node1 是配置了 SSD 的节点 首先我们给k8s-nod

.net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查

上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml 我们创建一个netcore-pod.yaml文件,内容如下: apiVersion: v1 kind: Pod #指明类型 metadata: name: netcore-pod labels: app: netcorepod spec: containers: - name: netcorepo

k8s StatefulSet ingress 例子

k8s StatefulSet例子 apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: