k8s 安装 ingress
参考文档:https://blog.csdn.net/omglolwtf/article/details/131214195。这里不能直接使用此 yaml 文件进行部署,deploy.yaml 文件中涉及到两个镜像(下载不到)参考文档:https://zhuanlan.zhihu.com/p/656385605。这里我们使用yaml 安装ingress,首先从官网获取到 yaml 文件。解决办法:
k8s 安装 ingress
这里我们使用yaml 安装ingress,首先从官网获取到 yaml 文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
这里不能直接使用此 yaml 文件进行部署,deploy.yaml 文件中涉及到两个镜像(下载不到)
image: registry.k8s.io/ingress-nginx/controller:v1.8.0
image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230407
然后并没有找到 kube-webhook-certgen:v20230407 该版本的镜像
解决办法:把 yaml 文件中的 image 信息修改成以上的两个源如下
...
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.8.2
...
image: docker.io/anjia0532/google-containers.ingress-nginx.kube-webhook-certgen:v1.1.1
...
然后执行部署命令
kubectl apply -f deploy.yaml
查看POD 状态
至此 Ingress 控制器安装完成
之后便可以创建 Ingress 资源了:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: k8s-combat-ingress
spec:
ingressClassName: nginx
rules:
- host: www.service1.io
http:
paths:
- backend:
service:
name: k8s-combat-service
port:
number: 8081
path: /
pathType: Prefix
- host: www.service2.io
http:
paths:
- backend:
service:
name: k8s-combat-service-2
port:
number: 8081
path: /
pathType: Prefix
对外暴露80端口
修改下载下来的deploy.yaml 还是 name: ingress-nginx-controller ,这一段。
增加 NodePort:80 和NodePort:443
如下:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.1.2
helm.sh/chart: ingress-nginx-4.0.18
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
externalTrafficPolicy: Local
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- appProtocol: http
name: http
port: 80
nodePort: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
port: 443
nodePort: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
type: NodePort
这样直接执行,会出现错误:nodePort: Invalid value valid ports is 30000-32767,
是因为k8s的node节点的端口默认被限制在30000-32767的范围,
先修改kube的默认配置:
vi /etc/kubernetes/manifests/kube-apiserver.yaml
在spec.containers.command的最后面加上 --service-cluster-ip-range 这一行,如下内容
- --service-node-port-range=1-65535
最后 重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
然后再执行:
kubectl apply -f deploy.yaml
ingress-nginx 添加 https 证书
生成证书文件
openssl req -x509 -nodes -days 2920 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=shanghai/O=nginxsvc"
#req是证书请求的子命令-newkey rsa:2048 -keyout tls.key -newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,-nodes 表示私钥不加密
#-out 指定生成的证书请求或者自签名证书名称-days 2920 证书有效期
#若执行自动输入,可使用-subj选项:-subj——证书相关的用户信息(subject的缩写)
导入证书文件到k8s secret 指定命名空间
kubectl create secret tls https-secret --key tls.key --cert tls.crt -n ${namespace}
实例 (创建编辑 ingress.yaml 文件)
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: monitor
namespace: dev-oms
spec:
ingressClassName: nginx-ingress-congtoller
rules:
- host: test.jdd966.cn #自定义的域名
http:
paths:
- backend:
service:
name: jdd-monitor # nginx 的service 名称
port:
number: 8085 # nginx 的端口号
path: /
pathType: Prefix
tls:
- hosts:
- test.jdd966.cn # ssl 证书所用的域名
secretName: https-secret
安装ingress ,参考文档:https://zhuanlan.zhihu.com/p/656385605
安装nginx ingress 无法下载镜像,参考文档:https://blog.csdn.net/omglolwtf/article/details/131214195
ingress 开放80端口,参考文档:https://blog.csdn.net/shelutai/article/details/123904190
添加https证书,参考文档:https://www.cnblogs.com/litter-rabbit/articles/15710593.html
更多推荐
所有评论(0)