阿里云ack的创建与应用案例
创建前开通ack相关服务:
开始创建
测试环境:选择使用 EIP 暴露 API Server, 才能在远程连接或者通过控制台的cloudshell管理集群
生产环境:找一台内网安装有kebctl客户端机器进行访问(做好访问权限控制)
连接设置:
复制k8s的外网远程连接配置到conf中
记得先备份好本地的config文件
cd $HOME/.kube/
cp config config.local.back
echo > config
vi config
查看nodes节点情况:
lantai@lantaideMacBook-Pro .kube % kubectl get nodes
NAME STATUS ROLES AGE VERSION
cn-chengdu.10.194.33.154 Ready <none> 54m v1.31.1-aliyun.1
cn-chengdu.10.245.11.206 Ready <none> 54m v1.31.1-aliyun.1
注:没有节点信息就不正常,一般原因是余额不足,导致无法创建节点资源。
简单的魔方游戏,熟悉sv与clb自动注册创建
基于clb注册暴露服务端口,会新创建一个clb进行转发到node的暴露端口上,
不太推荐生产,多创建一个clb就多消耗资源(根据业务规模情况吧)
部署前的clb:
部署后的clb:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ack-cube-svc LoadBalancer 192.168.31.155 47.108.xx.xx 80:31547/TCP 32s
在浏览器地址栏输入该服务EXTERNAL-IP字段的IP地址,即可开始魔方游戏。
删除练习相关资源:
kubectl delete -f ack-cube-svc.yaml
kubectl delete -f ack-cube.yaml
slb中的资源会自己删除:
部署一个nginx 服务示例:
基于clb注册暴露服务端口
- 先配置deployment
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: nginx-test #应用名称。
labels:
app: nginx-test
spec:
replicas: 1 #设置副本数量。
selector:
matchLabels:
app: nginx-test #对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx-test
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 #替换为您实际的镜像地址,格式为:<image_name:tags>。
ports:
- containerPort: 80 #需要在服务中暴露该端口。
Deployment资源创建与验证:
kubectl apply -f nginx-test.yaml
kubectl get deployment nginx-test
- 配置nginx的 sv
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-test
name: nginx-test-svc
namespace: default
spec:
ports:
- port: 8080 #公网暴露的端口,用了clb下面是LoadBalancer会自动开放端口到eip中
protocol: TCP
targetPort: 80
selector:
app: nginx-test # 需要与Deployment YAML文件中的matchLabels的值一致。
type: LoadBalancer # 使用clb自动注册,需要配置为LoadBalancer类型
Service资源创建与验证:
kubectl apply -f nginx-svc.yaml
kubectl get svc nginx-test-svc
lantai@lantaideMacBook-Pro .kube % kubectl get svc nginx-test-svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-test-svc LoadBalancer 192.168.31.180 47.108.*.* 8080:30456/TCP 18m
浏览器中访问: EXTERNAL-IP:8080
EXTERNAL-IP : 外部可访问的公网ip地址
删除资源:
kubectl delete -f nginx-svc.yaml
kubectl delete -f nginx-test.yaml
走不同域名访问不同svc资源:
为什么需要 Ingress ?
- Service 可以使用 NodePort 暴露集群外访问端口,但是性能低、不安全并且端口的范围有限。
- Service 缺少七层(OSI 网络模型)的统一访问入口,负载均衡能力很低,不能做限流、验证非法用户、链路追踪等等。
- Ingress 公开了从集群外部到集群内
服务
的 HTTP 和 HTTPS 路由,流量路由由 Ingress 资源上定义的规则控制。 - 我们使用 Ingress 作为整个集群统一的入口,配置 Ingress 规则转发到对应的 Service 。
基于ack中的ingress进行域名的转发规则实验:
ack的ingress配置参考:
ack ingress的副本数量控制:
https://help.aliyun.com/zh/ack/deploy-ingresses-in-a-high-reliability-architecture?spm=a2c4g.111866