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. TeeChart 的使用从入门到精通

    1.首先nutGet 进行使用 2.如果需要使用管方的Key 进行激活 3.直接上写的Demo代码 1 using System; 2 using System.Collections.Generic ...

  2. JAVA17安装体验JFX17抢先体验

    JAVA17安装体验JFX17抢先体验 java17版本是长期支持版,至少更新5年以上.而且商用免费!这里我就来体验一把. 一.下载配置 java 17 官网下载地址:https://www.orac ...

  3. Spring 中循环依赖的处理

    Spring 提供了十分强大的依赖注入功能,使得我们不再需要手动去管理对象的依赖项.然而,在实际的使用场景中,可能会遇到类似下面的依赖异常: Exception encountered during ...

  4. 五菱宝骏车机升级教程【嘟嘟桌面或ES文件管理器】

    文章来源:https://www.djww.net/607.html 简介 越来越多的汽车厂商自研车机系统,其实就是在原来安卓的基础上加入自己的元素,然后禁用某些功能从而实现禁止用户安装第三方app. ...

  5. python -m http.server在本地启动简单HTTP服务器的命令

    1.python -m http.server 命令   python -m http.server 是一个用于在本地启动简单 HTTP 服务器的命令.这个命令会在当前工作目录启动一个基本的 HTTP ...

  6. KubeFlow-Pipeline及Argo实现原理速析

    Argo是一个开源原生容器工作流引擎用于在Kubernetes上开发和运行应用程序.Argo Workflow流程引擎,可以编排容器流程来执行业务逻辑,在20年4月8日进入CNCF孵化器组. 而Kub ...

  7. Volcano 监控设计解读,一看就懂

    摘要:Volcano 方便AI,大数据,基因,渲染等诸多行业通用计算框架介入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力. Volcano 是一个 Kubernetes 云原 ...

  8. 【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?

    摘要:AI技术发展,正由应用落地阶段向效率化生产阶段演进,AI工程化能力将会不断深入业务,释放企业生产力. 本文分享自华为云社区<[云享·人物]华为云AI高级专家白小龙:AI如何释放应用生产力, ...

  9. update 没有索引导致业务崩了,老板骂了一个小时

    摘要:有天,一朋友在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩了,被老板教训了一波. 本文分享自华为云社区<update 没有索引,会锁全 ...

  10. 顶级加密混淆混淆工具测评:ipagurd

    ​ 顶级加密混淆混淆工具测评:ipagurd 摘要 JavaScript代码安全需求日益增长,因此JavaScript混淆工具的使用变得广泛.本文将对专业.商业JavaScript混淆工具ipagur ...