K8S Only IPV6的创建过程之二 完整版


整体过程

1. 阿里云新增一台虚拟机, 开通IPV6.与数据库,redis实现物理隔离. 并且进行环境基本处理,安装kubeadm等组件.
2. kubeadm 部署 K8S 1.28.4 并且使用ipv6 SingleStack 的calico网络组件.
3. 修改 nginx-ingress 1.9的部署文件, 修改ipv6支持.
4. 使用endpoint的方式将 mysql/redis 等服务通过service方式暴露到IPV6的K8S内部.
5. 修改myapp的配置文件, 将redis和mysql服务修改为服务名模式, 并且在宿主机使用mysql 的service name 重新注册.
6. docker build myapp 并且使用service的方式进行部署.
7. 使用ingress 进行服务暴露, 增加https证书处理.
8. 地址为 k8sipv6.jnxlh.online . 8.1 镜像信息
myapp v1.0 2bed9a6fcf63 7 hours ago 6.77GB 8.2 k8s的服务信息
[root@k8sipv6 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-service NodePort 2001:db8:42:1::5040 <none> 80:32063/TCP 10h
kubernetes ClusterIP 2001:db8:42:1::1 <none> 443/TCP 10h
mysql-service NodePort 2001:db8:42:1::7b09 <none> 3306:30406/TCP 8h
redis-service NodePort 2001:db8:42:1::9a1e <none> 6378:30410/TCP 8h 8.3 ingress信息
[root@k8sipv6 ~]# kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
myapp-ingress <none> k8sipv6.jnxlh.online 2408:400a:ed:d4ff:7a7b:f5dc::1 80, 443 7h54m 8.4 pod信息 IPV6
[root@k8sipv6 ~]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP
myapp-deployment-5487fb6775-96nhh 1/1 Running 0 6h54m 2001:db8:1234:5678:8:2:d1:790c

第一步机器处理

修改hosts
2408:400a:ed:d4ff:7a7b:f5dc::1 k8sipv6 第二步修改配置文件 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv6.ip_forward = 1
EOF sysctl -p

安装必备软件

docker
cri-docker
kubeadm 等

修改 cri-docker

vim /usr/lib/systemd/system/cri-docker.service
修改为
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

启动docker

systemctl enable --now docker
然后导入镜像
for i in `ls *.tar`; do docker load -i $i ;done 启动cri-docker
systemctl daemon-reload
systemctl restart cri-docker && systemctl enable cri-docker

初始化K8S

kubeadm init --node-name=k8sipv6  \
--image-repository=registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--pod-network-cidr=2001:db8:42:0::/64 \
--service-cidr=2001:db8:42:1::/112 \
--apiserver-advertise-address=2408:400a:ed:d4ff:7a7b:f5dc::1 \
--apiserver-bind-port=6443 注意需要修改一下 节点的taint
这个适合单节点部署的测试环境 kubectl taint nodes --all node-role.kubernetes.io/control-plane-

安装calico

wget https://raw.githubusercontent.com/sgryphon/kubernetes-ipv6/main/calico-ipv6.yaml

直接可以用就可以了
kubectl apply -f calico-ipv6.yaml

nginx-ingress的处理

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.0/deploy/static/provider/baremetal/deploy.yaml

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v20230407
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.9.0 注意 可以先拉去镜像, 然后在修改 deploy.yaml 里面的镜像信息 再执行 deploy
注意 要将里面的IPv4 修改为IPv6 ipFamilies:
- IPv6
ipFamilyPolicy: SingleStack

效果

kubectl get pods -A -owide
NAMESPACE NAME READY STATUS RESTARTS AGE IP
ingress-nginx ingress-nginx-admission-create-6ggqn 0/1 Completed 0 106s 2001:db8:1234:5678:8:2:d1:7903
ingress-nginx ingress-nginx-admission-patch-2nnfq 0/1 Completed 0 106s 2001:db8:1234:5678:8:2:d1:7904
ingress-nginx ingress-nginx-controller-7c76845d84-6t6f8 1/1 Running 0 106s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system calico-kube-controllers-77455c6d7c-cg6gr 1/1 Running 0 5m1s 2001:db8:1234:5678:8:2:d1:7902
kube-system calico-node-dthhl 1/1 Running 0 5m1s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system coredns-66f779496c-dzh5c 1/1 Running 0 5m14s 2001:db8:1234:5678:8:2:d1:7900
kube-system coredns-66f779496c-lrmn7 1/1 Running 0 5m14s 2001:db8:1234:5678:8:2:d1:7901
kube-system etcd-k8sipv6 1/1 Running 0 5m28s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system kube-apiserver-k8sipv6 1/1 Running 0 5m29s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system kube-controller-manager-k8sipv6 1/1 Running 0 5m29s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system kube-proxy-v8ztl 1/1 Running 0 5m13s 2408:400a:ed:d4ff:7a7b:f5dc:a12f
kube-system kube-scheduler-k8sipv6 1/1 Running 0 5m28s 2408:400a:ed:d4ff:7a7b:f5dc:a12f

redis 与 mysql的处理

apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6378
type: NodePort
---
apiVersion: v1
kind: Endpoints
metadata:
name: redis-service
subsets:
- addresses:
- ip: 2408:400a:ed:d4ff:7a7b:f5dc::2
ports:
- port: 6378

部署service和ingress

kubectl create secret tls k8sipv6_secret --key=k8sipv6.jnxlh.online.key --cert=k8sipv6.jnxlh.online.pem
cat > myapp.service <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp
name: myapp-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: myapp:v1.0
ports:
- containerPort: 5200
name: myapp ---
apiVersion: v1
kind: Service
metadata:
labels:
app: myapp
name: myapp-service
namespace: default
spec:
sessionAffinity: ClientIP
ports:
- port: 80
name: myapp-service
protocol: TCP
targetPort: 5200
selector:
app: myapp
type: NodePort EOF

部署 ingress

cat >ingress.yaml<<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- k8sipv6.jnxlh.online
secretName: k8sipv6secret
rules:
- host: k8sipv6.jnxlh.online
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
EOF kubectl apply -f ingress2.yaml 如果没有证书 可能会报错: 可以通过下面的命令来解决:
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission Warning: annotation "kubernetes.io/ingress.class" is deprecated, please use 'spec.ingressClassName' instead
Error from server (InternalError): error when creating "ingress2.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": no service port 443 found for service "ingress-nginx-controller-admission"

K8S Only IPV6的创建过程之二 完整版的更多相关文章

  1. RabbitMQ系列教程之二:工作队列(Work Queues)(转载)

    RabbitMQ系列教程之二:工作队列(Work Queues)     今天开始RabbitMQ教程的第二讲,废话不多说,直接进入话题.   (使用.NET 客户端 进行事例演示)          ...

  2. C++入门教程之二:变量

    C++入门教程之二:变量 变量,顾名思义,意思是变化的量.变量的定义是计算机语言中能储存计算结果或能表示值的抽象概念.一个基本的程序需要变量,因此变量是程序设计中的一大重点. 变量基本结构 var_t ...

  3. Eclipse+Maven创建webapp项目<二> (转)

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  4. 微信创建带参数二维码并加上logo

    1.因为带参数二维码有两种,分别是字符参数,数值参数,因此,在写创建方法的时候,需要进行判断 public void ShowQcCode(N_WX_QrCode code) { QRCodeCrea ...

  5. Eclipse+Maven创建webapp项目<二>

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  6. DB2创建function(二)

    DB2创建function(一),介绍将function内容作为字段值,或做为一个where条件的情况. DB2创建function(二),介绍返回的内容为一个集合的情况.调用结果集的示例如下: se ...

  7. django之创建第7-5-第二种传值方式(time/1232/xiaodneg)

    1.修改views文件 def foo(request,myID,myName): t = loader.get_template("foo.html") user = {&quo ...

  8. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...

  9. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  10. python设计模式之常用创建模式总结(二)

    前言 设计模式的创建模式终极目标是如何使用最少量最少需要修改的代码,传递最少的参数,消耗系统最少的资源创建可用的类的实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常 ...

随机推荐

  1. Blazor快速开发框架Known-V2.0.0

    Known2.0 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行. 官网:http://known.pumantech.com Gitee: https ...

  2. 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成. 痞子衡之前写了三篇文章 <M7 FlexRAM ECC> ...

  3. Java 将PPT转为OFD

    本文以Java后端程序代码展示如何实现将PPT幻灯片转成OFD格式.下面是具体步骤. 步骤1:安装PPT库-Spire.Presentation for Java 方法一.通过Maven仓库安装.在p ...

  4. 细说GaussDB(DWS)的2种查询优化技术

    本文分享自华为云社区<GaussDB(DWS)查询优化技术大揭秘>,作者: 胡辣汤. 大数据时代,数据量呈爆发式增长,经常面临百亿.千亿数据查询场景,当数据仓库数据量较大.SQL语句执行效 ...

  5. 面试官问我:CSS有哪些属性可以继承?

    摘要:本文带大家学习一下关于CSS属性的继承. 本文分享自华为云社区<关于CSS有哪些属性可以继承?>,作者:黛琳ghz. 前言 今天遇到一个很有意思的题目,通过题目可以顺便学习一下关于C ...

  6. 干货分享丨从MPG 线程模型,探讨Go语言的并发程序

    摘要:Go 语言的并发特性是其一大亮点,今天我们来带着大家一起看看如何使用 Go 更好地开发并发程序. 我们都知道计算机的核心为 CPU,它是计算机的运算和控制核心,承载了所有的计算任务.最近半个世纪 ...

  7. MindSpore实践:对篮球运动员目标的检测

    摘要:本文讲述的是MindSpore对篮球运动员目标的检测应用,通过AI技术辅助对篮球赛场进行分析. 本文分享自华为云社区<MindSpore大V博文系列:AI对篮球运动员目标的检测>,原 ...

  8. CG行业云渲染服务的演进之路

    摘要:影视动画.特效制作等行业渲染需求量增多,4K/6K以及各高分辨率会陆续成为主流,本地算力与存储资源已无法满足现有任务量.而随着大环境的演变,CG行业发展已进入发展快车道.来自赞奇科技的CEO金伟 ...

  9. 经典永流传,华为云媒体 AI 让老电影焕发新生

    摘要:近日,在华为云TechWave全球技术峰会(人工智能&数据)上,马栏山视频文创产业园首席专家周苏岳受邀发表演讲<经典永流传,媒体 AI 让老电影焕发新生>,分享与华为云原生媒 ...

  10. Springboot中,如何读取配置文件中的属性

    摘要:在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应 ...