K8S Only IPV6的创建过程之二 完整版
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的创建过程之二 完整版的更多相关文章
- RabbitMQ系列教程之二:工作队列(Work Queues)(转载)
RabbitMQ系列教程之二:工作队列(Work Queues) 今天开始RabbitMQ教程的第二讲,废话不多说,直接进入话题. (使用.NET 客户端 进行事例演示) ...
- C++入门教程之二:变量
C++入门教程之二:变量 变量,顾名思义,意思是变化的量.变量的定义是计算机语言中能储存计算结果或能表示值的抽象概念.一个基本的程序需要变量,因此变量是程序设计中的一大重点. 变量基本结构 var_t ...
- Eclipse+Maven创建webapp项目<二> (转)
Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- 微信创建带参数二维码并加上logo
1.因为带参数二维码有两种,分别是字符参数,数值参数,因此,在写创建方法的时候,需要进行判断 public void ShowQcCode(N_WX_QrCode code) { QRCodeCrea ...
- Eclipse+Maven创建webapp项目<二>
Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- DB2创建function(二)
DB2创建function(一),介绍将function内容作为字段值,或做为一个where条件的情况. DB2创建function(二),介绍返回的内容为一个集合的情况.调用结果集的示例如下: se ...
- django之创建第7-5-第二种传值方式(time/1232/xiaodneg)
1.修改views文件 def foo(request,myID,myName): t = loader.get_template("foo.html") user = {&quo ...
- C#基础课程之二变量常量及流程控制
课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- python设计模式之常用创建模式总结(二)
前言 设计模式的创建模式终极目标是如何使用最少量最少需要修改的代码,传递最少的参数,消耗系统最少的资源创建可用的类的实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常 ...
随机推荐
- Spring源码学习笔记7——Spring bean的初始化
一丶前言 上篇中我们了解了Spring bean的实例化--存在方法覆盖的使用CGLIB动态代理生成子类,反之反射调用构造函数.实例化后bean中的字段都是默认值,接下来就是对bean的属性进行填充, ...
- 21、Scaffold属性 FloatingActionButton实现类似闲鱼App底 部导航凸起按钮
FloatingActionButton详解 FloatingActionButton简称FAB ,可以实现浮动按钮,也可以实现类似闲鱼app的底部凸起导航 实现类似闲鱼App底部导航凸起按钮 c ...
- 教你用ab命令进行并发与压力测试
摘要:今天给大家分享一篇如何使用ab进行并发与压力测试的文章 本文分享自华为云社区<[高并发]如何使用ab进行并发与压力测试?>,作者:冰 河. 今天给大家分享一篇如何使用ab进行并发与压 ...
- 再谈BOM和DOM(1):BOM与DOM概述
JavaScript的实现包括以下3个部分: ECMAScript(核心):描述了JS的语法和基本对象. 浏览器对象模型(BOM):与浏览器交互的方法和接口 文档对象模型 (DOM):处理网页内容的方 ...
- APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法。
公钥和 MD5 值可以通过苹果开发工具.Keytool.appuploder 等多种工具获取,最简单的就是以 appuploader为例. 1.下载 appuploader工具 ,点击此处 下载 ...
- 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 你有没有关注过 APP 给你推送的消息? 出于提升用户活跃度的考虑,APP 会定期在应用内面向用户进行内通推送,推 ...
- pyshorteners 长短链接转换
import requests import pyshorteners as psn def long_to_short(url): url = psn.Shortener().chilpit.sho ...
- 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~!
全球最大同性交友网站 GitHub 是所有程序员的最爱,但是国内开发者访问Github 很不稳定,克隆开源项目也慢的离谱,常常clone失败. 之前大家或绕道码云(GitLab)或修改host文件,但 ...
- SpringCloud Alibaba技术栈(一)微服务介绍
B 站黑马视频教程:Here 源码-笔记:Code for Github 第一章 微服务总览 1. 软件系统架构的历史 软件系统架构大致经历了:单体应用架构->垂直应用架构->分布式架构- ...
- spring中的核心类有那些,各有什么作用?
BeanFactory:产生一个新的实例,可以实现单例模式BeanWrapper:提供统一的get及set方法ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 ...