k8s 安装 ingress
这里我们使用yaml 安装ingress,首先从官网获取到 yaml 文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

这里不能直接使用此 yaml 文件进行部署,deploy.yaml 文件中涉及到两个镜像(下载不到)

image: registry.k8s.io/ingress-nginx/controller:v1.8.0

image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230407

然后并没有找到 kube-webhook-certgen:v20230407 该版本的镜像

解决办法:把 yaml 文件中的 image 信息修改成以上的两个源如下

...
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.8.2
...
image: docker.io/anjia0532/google-containers.ingress-nginx.kube-webhook-certgen:v1.1.1
...

在这里插入图片描述
在这里插入图片描述
然后执行部署命令

kubectl apply -f deploy.yaml

查看POD 状态
在这里插入图片描述
至此 Ingress 控制器安装完成

之后便可以创建 Ingress 资源了:

apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata:  
  name: k8s-combat-ingress  
spec:  
  ingressClassName: nginx  
  rules:  
    - host: www.service1.io  
      http:  
        paths:  
          - backend:  
              service:  
                name: k8s-combat-service  
                port:  
                  number: 8081  
            path: /  
            pathType: Prefix  
    - host: www.service2.io  
      http:  
        paths:  
          - backend:  
              service:  
                name: k8s-combat-service-2  
                port:  
                  number: 8081  
            path: /  
            pathType: Prefix

对外暴露80端口

修改下载下来的deploy.yaml 还是 name: ingress-nginx-controller ,这一段。
增加 NodePort:80 和NodePort:443

如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.1.2
    helm.sh/chart: ingress-nginx-4.0.18
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    nodePort: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    nodePort: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: NodePort

这样直接执行,会出现错误:nodePort: Invalid value valid ports is 30000-32767,
是因为k8s的node节点的端口默认被限制在30000-32767的范围,

先修改kube的默认配置:

vi /etc/kubernetes/manifests/kube-apiserver.yaml

在spec.containers.command的最后面加上 --service-cluster-ip-range 这一行,如下内容

- --service-node-port-range=1-65535

最后 重启 kubelet

systemctl daemon-reload
systemctl restart kubelet

然后再执行:

kubectl apply -f deploy.yaml

ingress-nginx 添加 https 证书
生成证书文件

openssl req -x509 -nodes -days 2920 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=shanghai/O=nginxsvc"

#req是证书请求的子命令-newkey rsa:2048 -keyout tls.key  -newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,-nodes 表示私钥不加密
#-out 指定生成的证书请求或者自签名证书名称-days 2920  证书有效期
#若执行自动输入,可使用-subj选项:-subj——证书相关的用户信息(subject的缩写)

导入证书文件到k8s secret 指定命名空间

kubectl create secret tls https-secret --key tls.key --cert tls.crt -n ${namespace}

实例 (创建编辑 ingress.yaml 文件)

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: monitor
  namespace: dev-oms
spec:
  ingressClassName: nginx-ingress-congtoller
  rules:
    - host: test.jdd966.cn   #自定义的域名
      http:
        paths:
          - backend:
              service:
                name: jdd-monitor  # nginx 的service 名称
                port:
                  number: 8085  # nginx 的端口号
            path: /
            pathType: Prefix
  tls:
    - hosts:
        - test.jdd966.cn   # ssl 证书所用的域名
      secretName: https-secret

安装ingress ,参考文档:https://zhuanlan.zhihu.com/p/656385605
安装nginx ingress 无法下载镜像,参考文档:https://blog.csdn.net/omglolwtf/article/details/131214195
ingress 开放80端口,参考文档:https://blog.csdn.net/shelutai/article/details/123904190
添加https证书,参考文档:https://www.cnblogs.com/litter-rabbit/articles/15710593.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐