K8S下 ingress 应用

ingress安装

获取安装所需配置文件位置

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

ingress-nginx

注意选择tag对应的版本,我们这里选择0.20.0

ingress安装所需得文件:mandatory.yaml是其他文件的合集。

部署ingress

准备镜像,从这里mandatory.yaml查看需要哪些镜像

镜像名称版本下载地址
k8s.gcr.io/defaultbackend-amd641.5registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64
quay.io/kubernetes-ingress-controller/nginx-ingress-controller0.20.0registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/nginx-ingress-controller

更新mandatory.yaml中的镜像地址

替换 mandatory.yaml 中 defaultbackend-amd64 和 nginx-ingress-controller 镜像地址

部署nginx-ingress-controller

kubectl apply -f mandatory.yaml

查看ingress-nginx组件状态

[root@dev app]# kubectl get pods -n ingress-nginx
NAME                                        READY     STATUS    RESTARTS   AGE
default-http-backend-7db7c45b69-cw5nl       1/1       Running   0          1h
nginx-ingress-controller-579fc9dd76-f468v   1/1       Running   0          1h

[root@dev app]# kubectl get service -n ingress-nginx
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default-http-backend   ClusterIP   10.106.131.113   <none>        80/TCP                       1h

[root@dev app]# curl 10.106.131.113
default backend - 404
[root@dev app]#
# 返回default backend - 404说明部署成功

创建NodePort类型得Service,接入外部流量

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
      nodePort: 30080   #添加了这行,固定下外部访问的端口
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
      nodePort: 30443   #添加了这行
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

测试

创建Deployment和对应的ClusterIP类型Service

apiVersion: v1
kind: Service
metadata:
  name: business-demo
  labels:
    app: business-demo
spec:
  ports:
    - port: 20000
      targetPort: 20000
      #nodePort: 31001
      protocol: TCP
  type: ClusterIP
  selector:
    app: business-demo
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: business-demo
  labels:
    app: business-demo
spec:
  replicas: 3
  strategy:
    rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间
      maxSurge: 1      #滚动升级时会先启动1个pod
      maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
  template:
    metadata:
      labels:
        app: business-demo
    spec:
      containers:
      - image: dev.server:5000/woqu/business-demo:dev-0.0.1-SNAPSHOT
        name: business-demo
        volumeMounts:
        - mountPath: "/home/project/dockerdemo/target"
          name: business-demo
        ports:
        - containerPort: 20000
          name: business-demo
        readinessProbe:
          httpGet:
            path: /ready
            port: 20000
            scheme: HTTP
          initialDelaySeconds: 5
          periodSeconds: 5
      imagePullSecrets:
      - name: docker-rep
      volumes:
      - name: business-demo
        hostPath:
          path: "/opt/data/logs/business-demo"

创建Ingress

apiVersion: extensions/v1beta1 # kubectl api的版本
kind: Ingress # kubernetes的资源类型 这里是Ingress
metadata:
  name: business-demo # 路由的名称
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: dev.master # 域名
      http:
        paths:
          - path: /bdemo # 匹配路径
            backend:
              serviceName: business-demo # 转发的服务名
              servicePort: 20000 # 转发到服务的哪个端口 对应上文的service port

配置说明

1-4行:跟Kubernetes的其他配置一样,ingress的配置也需要apiVersion,kind和metadata字段。配置文件的详细说明请查看部署应用, 配置容器和 使用resources.

5-6行: Nginx-Ingress-Controller的注解 配置。Nginx-Ingress-Controller的注解可以在这里查询 传送门

7-10行: Ingress spec 中包含配置一个loadbalancer或proxy server的所有信息。最重要的是,它包含了一个匹配所有入站请求的规则列表。目前ingress只支持http规则。

11-12行:每条http规则包含以下信息:一个host配置项(比如for.bar.com,在这个例子中默认是dev.master),path列表(比如:/bdemo),每个path都关联一个backend(比如test:80)。在loadbalancer将流量转发到backend之前,所有的入站请求都要先匹配host和path。

13-15行:正如 services doc中描述的那样,backend是一个service:port的组合。Ingress的流量被转发到它所匹配的backend。

Nginx-Ingress-Controller的注解可以在这里查询 传送门

查看部署情况

[root@dev app]# kubectl get ingress
NAME            HOSTS        ADDRESS   PORTS     AGE
business-demo   dev.master             80        53m

## 请求应用,返回正常
[root@dev app]# curl http://dev.master:30080/bdemo/ready
true
[root@dev app]#

查看nginx配置

[root@dev app]# kubectl exec -n ingress-nginx -it nginx-ingress-controller-579fc9dd76-f468v -- /bin/bash


www-data@nginx-ingress-controller-579fc9dd76-f468v:/etc/nginx$ ls
fastcgi.conf        mime.types           scgi_params
fastcgi.conf.default    mime.types.default     scgi_params.default
fastcgi_params        modsecurity           template
fastcgi_params.default    modules               uwsgi_params
geoip            nginx.conf           uwsgi_params.default
koi-utf            nginx.conf.default     win-utf
koi-win            opentracing.json
lua            owasp-modsecurity-crs
www-data@nginx-ingress-controller-579fc9dd76-f468v:/etc/nginx$ more nginx.conf

TLS

你可以通过指定包含TLS私钥和证书的secret来加密Ingress。 目前,Ingress仅支持单个TLS端口443,并假定TLS termination。 如果Ingress中的TLS配置部分指定了不同的主机,则它们将根据通过SNI TLS扩展指定的主机名(假如Ingress controller支持SNI)在多个相同端口上进行复用。 TLS secret中必须包含名为tls.crt和tls.key的密钥,这里面包含了用于TLS的证书和私钥,例如:

apiVersion: v1
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
kind: Secret
metadata:
  name: testsecret
  namespace: default
type: Opaque

在Ingress中引用这个secret将通知Ingress controller使用TLS加密从将客户端到loadbalancer的channel:

piVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: no-rules-map
spec:
  tls:    #添加了tls这一段
  - hosts:
    - dev.master
    secretName: testsecret  #这里结束
  backend:
    serviceName: business-demo
    servicePort: 20000

更新Ingress

kubectl edit ing business-demo

这会弹出一个包含已有的yaml文件的编辑器,修改它,保存它会更新API server中的资源,这会触发ingress controller重新配置loadbalancer。

当然,修改ingress yaml文件上用kubectl replace -f命令一样可以达到同样的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s安装ingress可以通过以下步骤进行: 1. 首先,确保你的kubernetes集群已经部署好并且正常运行。 2. 接下来,选择一种支持ingressingress controller。常见的选择有Nginx Ingress Controller和Traefik Ingress Controller。你可以根据自己的需求选择合适的controller。 3. 安装ingress controller。可以通过使用Helm进行安装,以下是使用Helm安装Nginx Ingress Controller的示例命令: ```shell helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install my-ingress-nginx ingress-nginx/ingress-nginx ``` 如果你选择安装Traefik Ingress Controller,可以参考官方文档获取安装命令。 4. 等待ingress controller部署完成,并且确保所有相关的Pod已经正常运行。你可以使用以下命令检查相关的Pod状态: ```shell kubectl get pods -n <namespace> ``` 5. 配置ingress资源。创建一个ingress资源文件,并按照你的需求配置相应的规则和后端服务。以下是一个示例的ingress资源文件: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - http: paths: - path: /foo pathType: Prefix backend: service: name: foo-service port: number: 80 - path: /bar pathType: Prefix backend: service: name: bar-service port: number: 80 ``` 在这个示例中,我们定义了两个路径规则,分别映射到名为foo-service和bar-service的后端服务。 6. 应用ingress资源。使用kubectl命令将ingress资源文件应用到你的kubernetes集群中: ```shell kubectl apply -f <ingress-resource-file.yaml> ``` 确保ingress资源已经成功创建: ```shell kubectl get ingress ``` 你应该能够看到刚刚创建的ingress资源。 7. 配置DNS解析。根据你的集群环境,可能需要配置DNS解析将域名指向ingress controller的IP地址。 完成上述步骤后,你的kubernetes集群就已经配置好了ingress。你可以通过访问指定的域名和路径来访问后端服务。请根据自己的实际情况进行调整和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值