k8s 部署ingress nginx

简介

只是做记录,防止忘记。今天我们要实现的是文章图片上面这种访问方式.

k8s 安装ingress nginx

首先部署下面这个yaml档

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

大部分教程的做法都是直接输入命令,但是我喜欢先下载

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

因为是在国内,所以你需要确定里面的镜像能不能下载到机器里,如果不行,推荐使用我下面这个方法

https://www.bboysoul.com/2019/08/19/k8s%E5%85%8Dfq%E4%B8%8B%E8%BD%BD%E9%95%9C%E5%83%8F/

下载完成镜像之后部署

kubectl apply -f mandatory.yaml

值得注意的是这个yaml档并不包含service,创建service要使用下面这个yaml档

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

把这个yaml档下载到本地,之后查看内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx

因为我们要实现文章图片上面这个状态,所以这个service还要写一个nodePort: 80和nodePort: 443字段,比如下面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
nodePort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx

在apply这个service之前,我们要注意的是我们的apiserver 默认的node port端口范围是30000-32767,但是我们所需要的nodeport端口不在这个范围之内,所以要修改apiserver的nodeport端口

因为我是使用kubeadm搭建的集群,所以

编辑下面这个文件,

vim /etc/kubernetes/manifests/kube-apiserver.yaml

在command下新增

- --service-node-port-range=30-3000

之后保存即可,apiserver会自动重启并且应用配置,修改完成一个节点之后,其他的master节点也需要修改,保证apiserver的配置相同

接着应用这个yaml档即可

最后查看这个svc是否正常

kubectl get svc -A

如果正常的话我们测试一下

使用下面这个yaml档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress
spec:
selector:
matchLabels:
app: nginx-ingress
replicas: 1
template:
metadata:
labels:
app: nginx-ingress
spec:
containers:
- name: nginx-ingress
image: nginx:1.15
ports:
- containerPort: 80
---
#service
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ingress

---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.bboysoul.com
http:
paths:
- path: /
backend:
serviceName: nginx-ingress
servicePort: 80

上面定义了三个对象一个是deployment,一个是service,最后一个是ingress ingress和service绑定,所以我们只要访问nginx.bboysoul.com就可以访问到这个deployment了

kubectl apply -f ingress-nginx.yaml

在外部dns里添加你k8smaster节点和nginx.bboysoul.com的解析,之后直接访问就可以了

欢迎关注Bboysoul的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道