ingress-nginx部署及配置https

1、Ingress

在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePort和LoadBalancer这两种类型的服务,或者使用Ingress。Ingress本质是通过http代理服务器将外部的http请求转发到集群内部的后端服务。

2、ingress-nginx部署

ingress-nginx组件有几个部分组成:

  • configmap.yaml:提供configmap可以在线更行nginx的配置
  • default-backend.yaml:提供一个缺省的后台错误页面 404
  • namespace.yaml:创建一个独立的命名空间 ingress-nginx
  • rbac.yaml:创建对应的role rolebinding 用于rbac
  • tcp-services-configmap.yaml:修改L4负载均衡配置的configmap
  • udp-services-configmap.yaml:修改L4负载均衡配置的configmap
  • with-rbac.yaml:有应用rbac的nginx-ingress-controller组件
  • service-nodeport:指定nginx的80端口和443端口

下载部署文件,整理的github

for file in configmap.yaml default-backend.yaml namespace.yaml rbac.yaml tcp-services-configmap.yaml udp-services-configmap.yaml with-rbac.yaml service-nodeport.yaml;do
    wget https://raw.githubusercontent.com/fungitive/kubernetes/master/ingress-nginx/$file
done

创建名称空间

kubectl apply -f namespace.yaml

部署其他

kubectl apply -f .

部署成功如下

[root@master ~]# kubectl get pods -n ingress-nginx
NAME                                        READY     STATUS    RESTARTS   AGE
default-http-backend-8477465f57-fzgr8       1/1       Running   0          1d
nginx-ingress-controller-6bd7c597cb-hwgwz   1/1       Running   0          1d

[root@master ~]# kubectl get svc -n ingress-nginx
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default-http-backend   ClusterIP   10.97.181.78    <none>        80/TCP                       1d
ingress-nginx          NodePort    10.109.51.251   <none>        80:30080/TCP,443:30643/TCP   1d

部署一个nginx应用,使用ingress-nginx服务

vi nginx-test.yaml

apiVersion: v1
kind: Service
metadata:
  name: test-ingress
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: test-ingress
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: test-ingress
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: test-ingress
    spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: IfNotPresent
        name: test-nginx
        ports:
        - containerPort: 80

vi nginx-ingress-yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: feiutest.cn
    http:
      paths:
      - path:
        backend:
          serviceName: test-ingress
          servicePort: 80
  • host指虚拟出来的域名
  • path:/console匹配后面的应用路径
  • servicePort主要是定义服务的时候的端口,不是NodePort.
  • path:/ 匹配后面应用的路径

创建成功,在pods所在node上解析域名

vi /etc/hosts

192.168.0.22 feiutest.cn

测试

[root@master demo]# curl http://feiutest.cn:30080
this is test ingress-nginx

3、https配置

第一步:制作自签证书

[root@master demo]# openssl genrsa -out tls.key 2048

[root@master demo]# openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Guangdong/L=Guangzhou/O=devops/CN=feiutest.cn

生成两个文件:

[root@master demo]# ls
tls.crt  tls.key

第二步:创建secret secret介绍

[root@master demo]# kubectl create secret tls nginx-test --cert=tls.crt --key=tls.key

[root@master demo]# kubectl get secret
NAME                     TYPE                                  DATA      AGE
nginx-test               kubernetes.io/tls                     2         17s

第三步:修改ingress

vi nginx-ingress-yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: feiutest.cn
    http:
      paths:
      - path:
        backend:
          serviceName: test-ingress
          servicePort: 80
  tls:
  - hosts:
    - feiutest.cn
    secretName: nginx-test

kubectl apply -f nginx-ingress-yaml

测试访问

https://feiutest.cn:30643

正常访问,成功了!

参考

https://kubernetes.io/docs/concepts/services-networking/ingress/

https://kubernetes.github.io/ingress-nginx/

Ingress-Nginx是一种Kubernetes中的Ingress控制器,用于管理入站流量,并将流量路由到Kubernetes集群中的服务。以下是部署Ingress-Nginx的步骤: 1. 安装Ingress-Nginx控制器。 使用以下命令安装控制器: ``` kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml ``` 该命令将部署Ingress-Nginx维护的最新版本的控制器。 2. 验证控制器安装。 使用以下命令验证控制器是否已成功安装: ``` kubectl get pods -n ingress-nginx ``` 如果控制器已成功安装,则应看到类似于以下内容的输出: ``` NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-8gmgc 0/1 Completed 0 2m ingress-nginx-admission-patch-q8v2m 0/1 Completed 0 2m ingress-nginx-controller-5b4bcf79d8-9qz7j 1/1 Running 0 2m ``` 3. 部署应用程序。 使用以下命令部署您的应用程序: ``` kubectl apply -f your-application.yaml ``` 该命令将使用您的应用程序配置文件中指定的服务和端口部署应用程序。 4. 部署Ingress资源。 使用以下命令部署Ingress资源: ``` kubectl apply -f your-ingress.yaml ``` 该命令将使用您的Ingress配置文件中指定的规则和路径将流量路由到您的应用程序。 5. 验证Ingress是否生效。 使用以下命令验证Ingress是否已成功生效: ``` kubectl get ingress ``` 如果Ingress已成功生效,则应看到类似于以下内容的输出: ``` NAME HOSTS ADDRESS PORTS AGE your-ingress * 192.168.50.10 80 2m ``` 这意味着您的应用程序现在可以通过Ingress访问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菲宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值