nginx ingress controller
ingress 是 kubernetes 提供的一种反向代理机制,用以将集群内部的服务通过指定的域名或者端口暴露出来,从而达到统一流量入口的作用。使用 ingress 的前提是集群中要有一个 ingress controller 来监控和更新后端 service pod 的变化。
部署方式
值得注意的是,以下两种部署方式都是在非裸金属服务器中部署
helm 部署
如果你会使用 helm 管理工具,可以通过 helm 使用以下命令来一键部署 nginx ingress controller:
1
2
3
|
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
|
kubectl 部署
除了 helm 部署之外,nginx 还提供了 kubectl 的部署方式,同样也是非常简单:
1
|
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml
|
添加 external-ip
由于 nginx ingress controller 的 service 在部署时没有通过 LoadBalance 的方式,而是通过 NodePort 的方式应用。因此,服务部署完成后,需要通过手动添加 external 的方式让 nginx ingress controller 正常工作。
example
1
2
3
4
5
6
|
$ kubectl get nodes
NAME STATUS ROLES EXTERNAL-IP
host-1 Ready master 203.0.113.1
host-2 Ready node 203.0.113.2
host-3 Ready node 203.0.113.3
|
- 查看 nginx ingress controller 的 service,会发现一个类型为 NodePort 的服务
1
2
3
4
5
|
$ kubectl get svc -n nginx-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.110.2.228 192.168.3.93,192.168.0.163,192.168.0.139,192.168.0.137 80:31116/TCP,443:32217/TCP 22h
ingress-nginx-controller-admission ClusterIP 10.104.108.32 <none> 443/TCP 22h
|
- 编辑该服务,将节点的 external-ip 加入
1
2
3
4
5
|
spec:
externalIPs:
- 203.0.113.1
- 203.0.113.2
- 203.0.113.3
|
- 至此,nginx ingress controller 就部署完成了。
使用方式
基础使用
nginx ingress controller 部署完成后使用方式非常简单,在 spec 下添加 ingreeClassName: nginx
即可。详细解释,可以通过kubectl explain ingress.spec.ingressClassName
查看。要注意的是,kubernetes 1.19 之后的版本也仅支持这种方式。
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
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
creationTimestamp: "2020-04-07T09:28:50Z"
generation: 8
labels:
app: gocd
chart: gocd-1.27.0
component: server
heritage: Tiller
release: gocd
name: gocd-server
namespace: cd
resourceVersion: "163526"
uid: 30f1bb4xxxxxx-xx-xx-xx
spec:
ingressClassName: nginx
rules:
- host: gocd.tt
http:
paths:
- backend:
service:
name: gocd-server
port:
number: 8153
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: 192.168.0.xxx
|
Reference
相关内容参考了:here