K8S | Ingress的基本使用
缘由
看了statefulset基础教程的基础教程,并且把环境搭建起来后。pod内部是可以连通了。但是我不知道怎么去从外部访问。在网上搜索一番,通过Ingress可以作为集群的入口。遂记录之。
结合Statefulset的示例进行配置。这是未配置Ingress之前的Statefulset示例:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: "www-data-pv"
labels:
name: www-data-pv
release: stable
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /nfs/www/data
server: 192.168.84.75
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: www-data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
name: www-data-pv
release: stable
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
persistentVolumeClaim:
claimName: www-data-pvc
Ingress
我们知道前面我们使用 NodePort 和 LoadBlancer 类型的 Service 可以实现把应用暴露给外部用户使用,除此之外,Kubernetes 还为我们提供了一个非常重要的资源对象可以用来暴露服务给外部用户,那就是 ingress。
创建一个 ingress 对象:(ingress.yaml)
# Ingress 配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-cluster-external
labels:
name: web-cluster-external
app: nginx
spec:
rules:
- host: nginx.com
http:
paths:
- backend:
serviceName: web-cluster-external
servicePort: 80
path: /
然后为 traefik dashboard 创建对应的 ingress 对象:
$ kubectl create -f ingress.yaml
可以查看ingress是否创建成功
kubectl describe ingress web-cluster-external
要注意上面的 ingress 对象的规则,特别是 rules 区域,我们这里是要为 ngin 建立一个 ingress 对象,所以这里的 serviceName 对应的是上面我们创建的 web-cluster-external
,端口也要注意对应 80端口,为了避免端口更改,这里的 servicePort 的值也可以替换成上面定义的 port 的名字: web
``
创建完成后,我们应该怎么来测试呢?
- 第一步,在本地的**/etc/hosts**里面添加上 nginx.com
与 节点外网 IP 的映射关系- 第二步,在浏览器中访问:nginx.com 我们会发现并没有得到我们期望的 inde.html界面,这是因为我们上面statefulset 部署 nginx 的时候没有外放NodePort端口。需要配置。ClusterIP都是集群内部访问的。需要我们建立一个名为service对象node.yaml
# cluster ip
apiVersion: v1
kind: Service
metadata:
name: web-cluster-external
labels:
name: web-cluster-external
app: nginx
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
nodePort: 32002 #增加
type: NodePort
创建service对象
kubectl apply node.yaml
这样就可以通过节点 ip:32002来访问nginx或者是通过域名来访问啦
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2020/08/ingress/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接