kubernetes的ingress-nginx使用案例

这是一篇学习记录。记录kubernetes集群中如何将jenkins服务通过域名接入外部。由于是测试环境,域名是自定义的,解析写在/etc/hosts和自己本地的hosts中。

部署图:

一、部署后端Jenkins的pod和service

# cd ../
# mkdir demo
# cd demo

# cat deploy-jenkinsdemo.yaml 
apiVersion: v1
kind: Service  #资源类别是Service
metadata:      #元数据
  name: myapp  #在同一个资源类别中,唯一的名字
  namespace: default  #名称空间
spec:    #目标状态
  selector:    #
    app: myapp
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:   #以下是容器的配置。与containers同级的配置属于pod的设置
      - name: myapp
        image: jenkins/jenkins:lts
        ports:
        - name: http
          containerPort: 8080

#docker pull jenkins/jenkins:lts

#kubectl apply -f deploy-jenkinsdemo.yaml 

# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
myapp-deploy-5565c495f4-9hz8d 1/1 Running 0 19h

# kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 77d
myapp ClusterIP 10.99.69.88 <none> 8080/TCP 19h

二、部署ingress-controller

https://github.com/kubernetes/ingress-nginx/tree/master/deploy/static 下载:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml(通用的部署方式,单用这文件可以部署)

我用基本的部署文件。先执行namespace.yaml,后执行configmap.yamlrbac.yamlwith-rabc.yaml

#mkdir ingress-nginx

#cd ingress-nginx

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

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

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

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

#docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0    (网络不好会比较慢,先下载)

#kubectl apply -f namespace.yaml 

#kubectl apply -f ./

# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-86449c74bb-4cp6c 1/1 Running 0 19h

三、部署Service(ingress-nginx)

# cat service-nodeport.yaml 
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: 30080
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      nodePort: 30443
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---

#kubectl apply -f service-nodeport.yaml

# kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.110.96.58 <none> 80:30080/TCP,443:30443/TCP 19h

启动service的ingres-nginx后,可以查看nginx.conf配置,配置会自动更新。

# kubectl exec -n ingress-nginx -it nginx-ingress-controller-86449c74bb-4cp6c -- /bin/sh
$ cat nginx.conf

查看所有节点的服务情况:

所有节点的30080端口都已经打开

 域名myapp.magedu.com会负载均衡到所有节点。

四、验证

由于域名是自己编的,没有dns解析。所以:

1.在k8s集群的节点配置hosts:

# cat /etc/hosts

ip.204 myapp.magedu.com
ip.143  myapp.magedu.com
ip.240  myapp.magedu.com

2.在自己本地修改hosts

3.在本机浏览器中访问:

myapp.magedu.com:30080

4.复制Jenkins的密钥:

# kubectl exec -n default -it myapp-deploy-5565c495f4-9hz8d -- /bin/sh
$ cat /var/jenkins_home/secrets/initialAdminPassword
d7d3a04411734841a49cdac9b78e6ab4

 5.正常使用Jenkins

 

原文地址:https://www.cnblogs.com/zoujiaojiao/p/11193331.html