k8s学习 — (实践)第五章 服务发现

※ 各章节重要知识点1 Service1.1 Service 的定义1.1.1 命令操作1.1.2 Endpoint

1.2 代理 k8s 外部服务1.2.1 各环境访问名称统一1.2.2 访问 k8s 集群外的其他服务1.2.3 项目迁移

1.3 反向代理外部域名1.4 常用类型1.4.1 ClusterIP1.4.2 ExternalName1.4.3 NodePort1.4.4 LoadBalancer

2 Ingress2.1 安装 ingress-nginx2.1.1 添加 helm 仓库2.1.2 下载包2.1.3 配置参数2.1.4 创建 Namespace2.1.5 安装 ingress

2.2 基本使用2.2.1 创建一个 ingress2.2.2 多域名配置

※ 各章节重要知识点

k8s学习 — 各章节重要知识点

1 Service

负责东西流量(同层级/内部服务网络通信)的通信。

1.1 Service 的定义

apiVersion: v1

kind: Service

metadata:

name: nginx-svc

labels:

app: nginx-svc

spec:

ports:

- name: http # service 端口配置的名称

protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCP

port: 80 # service 自己的端口

targetPort: 9527 # 目标 pod 的端口

- name: https

port: 443

protocol: TCP

targetPort: 443

selector: # 选中当前 service 匹配哪些 pod,对哪些 pod 的东西流量进行代理

app: nginx

1.1.1 命令操作

# 创建 service

kubectl create -f nginx-svc.yaml

# 查看 service 信息,通过 service 的 cluster ip 进行访问

kubectl get svc

# 查看 pod 信息,通过 pod 的 ip 进行访问

kubectl get po -owide

# 创建其他 pod 通过 service name 进行访问(推荐)

kubectl exec -it busybox -- sh

curl http://nginx-svc

# 默认在当前 namespace 中访问,如果需要跨 namespace 访问 pod,则在 service name 后面加上 . 即可

curl http://nginx-svc.default

1.1.2 Endpoint

1.2 代理 k8s 外部服务

实现方式:

编写 service 配置文件时,不指定 selector 属性自己创建 endpoint

endpoint 配置:

apiVersion: v1

kind: Endpoints

metadata:

labels:

app: wolfcode-svc-external # 与 service 一致

name: wolfcode-svc-external # 与 service 一致

namespace: default # 与 service 一致

subsets:

- addresses:

- ip: # 目标 ip 地址

ports: # 与 service 一致

- name: http

port: 80

protocol: TCP

1.2.1 各环境访问名称统一

1.2.2 访问 k8s 集群外的其他服务

1.2.3 项目迁移

1.3 反向代理外部域名

apiVersion: v1

kind: Service

metadata:

labels:

app: wolfcode-external-domain

name: wolfcode-external-domain

spec:

type: ExternalName

externalName: www.wolfcode.cn

1.4 常用类型

1.4.1 ClusterIP

只能在集群内部使用,不配置类型的话默认就是 ClusterIP。

1.4.2 ExternalName

返回定义的 CNAME 别名,可以配置为域名。

1.4.3 NodePort

会在所有安装了 kube-proxy 的节点都绑定一个端口,此端口可以代理至对应的 Pod,集群外部可以使用任意节点 ip + NodePort 的端口号访问到集群中对应 Pod 中的服务。

当类型设置为 NodePort 后,可以在 ports 配置中增加 nodePort 配置指定端口,需要在下方的端口范围内,如果不指定会随机指定端口

端口范围:30000~32767

端口范围配置在 /usr/lib/systemd/system/kube-apiserver.service 文件中

1.4.4 LoadBalancer

使用云服务商(阿里云、腾讯云等)提供的负载均衡器服务。

2 Ingress

Ingress 大家可以理解为也是一种 LB 的抽象,它的实现也是支持 nginx、haproxy 等负载均衡服务的。

2.1 安装 ingress-nginx

https://kubernetes.github.io/ingress-nginx/deploy/#using-helm

2.1.1 添加 helm 仓库

# 添加仓库

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# 查看仓库列表

helm repo list

# 搜索 ingress-nginx

helm search repo ingress-nginx

2.1.2 下载包

# 下载安装包

helm pull ingress-nginx/ingress-nginx

2.1.3 配置参数

# 将下载好的安装包解压

tar xf ingress-nginx-xxx.tgz

# 解压后,进入解压完成的目录

cd ingress-nginx

# 修改 values.yaml

镜像地址:修改为国内镜像

registry: registry.cn-hangzhou.aliyuncs.com

image: google_containers/nginx-ingress-controller

image: google_containers/kube-webhook-certgen

tag: v1.3.0

hostNetwork: true

dnsPolicy: ClusterFirstWithHostNet

修改部署配置的 kind: DaemonSet

nodeSelector:

ingress: "true" # 增加选择器,如果 node 上有 ingress=true 就部署

将 admissionWebhooks.enabled 修改为 false

将 service 中的 type 由 LoadBalancer 修改为 ClusterIP,如果服务器是云平台才用 LoadBalancer

2.1.4 创建 Namespace

# 为 ingress 专门创建一个 namespace

kubectl create ns ingress-nginx

2.1.5 安装 ingress

# 为需要部署 ingress 的节点上加标签

kubectl label node k8s-node1 ingress=true

# 安装 ingress-nginx

helm install ingress-nginx ./ingress-nginx -n ingress-nginx

2.2 基本使用

2.2.1 创建一个 ingress

apiVersion: networking.k8s.io/v1

kind: Ingress # 资源类型为 Ingress

metadata:

name: wolfcode-nginx-ingress

annotations:

kubernetes.io/ingress.class: "nginx"

nginx.ingress.kubernetes.io/rewrite-target: /

spec:

rules: # ingress 规则配置,可以配置多个

- host: k8s.wolfcode.cn # 域名配置,可以使用通配符 *

http:

paths: # 相当于 nginx 的 location 配置,可以配置多个

- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配

backend:

service:

name: nginx-svc # 代理到哪个 service

port:

number: 80 # service 的端口

path: /api # 等价于 nginx 中的 location 的路径前缀匹配

2.2.2 多域名配置

apiVersion: networking.k8s.io/v1

kind: Ingress # 资源类型为 Ingress

metadata:

name: wolfcode-nginx-ingress

annotations:

kubernetes.io/ingress.class: "nginx"

nginx.ingress.kubernetes.io/rewrite-target: /

spec:

rules: # ingress 规则配置,可以配置多个

- host: k8s.wolfcode.cn # 域名配置,可以使用通配符 *

http:

paths: # 相当于 nginx 的 location 配置,可以配置多个

- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配

backend:

service:

name: nginx-svc # 代理到哪个 service

port:

number: 80 # service 的端口

path: /api # 等价于 nginx 中的 location 的路径前缀匹配

- pathType: Exec # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配

backend:

service:

name: nginx-svc # 代理到哪个 service

port:

number: 80 # service 的端口

path: /

- host: api.wolfcode.cn # 域名配置,可以使用通配符 *

http:

paths: # 相当于 nginx 的 location 配置,可以配置多个

- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配

backend:

service:

name: nginx-svc # 代理到哪个 service

port:

number: 80 # service 的端口

path: /

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: