K8S集群实现外部访问(INGRESS)

这篇具有很好参考价值的文章主要介绍了K8S集群实现外部访问(INGRESS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境:

master node01 node02
192.168.1.40 192.168.1.41 192.168.1.42

INGRESS

作用:Ingress 是对集群中服务的外部访问进行管理的 API 对象。

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算

1.创建DEPLOYMENT

PS:创建nginx和httpd

[root@master yaml]# vim nginx.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app:  nginx
    spec:
      containers:
      - name: nginx
        image:  nginx
---
kind: Service
apiVersion: v1
metadata:
  name: nginx-svc
spec: 
  selector:
    app:  nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    
[root@master yaml]# kubectl  apply  -f  nginx.yaml 
deployment.extensions/nginx created
service/nginx-svc created

[root@master yaml]# vim httpd.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: httpd
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app:  httpd
    spec:
      containers:
      - name: httpd
        image:  httpd
---
kind: Service
apiVersion: v1
metadata:
  name: httpd-svc
spec: 
  selector:
    app:  httpd
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

[root@master yaml]# kubectl  apply  -f  httpd.yaml  
deployment.extensions/httpd created
service/httpd-svc created
[root@master yaml]# kubectl  get deployments.
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
httpd   3/3     3            3           117s
nginx   3/3     3            3           3m10s
[root@master yaml]# kubectl  get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
httpd-svc    ClusterIP   10.97.134.80   <none>        80/TCP    2m1s
nginx-svc    ClusterIP   10.96.37.85    <none>        80/TCP    3m14s

2.部署INGRESS

2.1 下载INGRESS文件

[root@master yaml]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/baremetal/deploy.yaml

2.2 修改YAML文件

[root@master yaml]# vim deploy.yaml
......
spec:
      hostNetwork:  true   #本地网络访问
      dnsPolicy: ClusterFirst
      containers:
        - name: controller
          image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.30.0
          imagePullPolicy: IfNotPresent
......
[root@master yaml]# kubectl  apply  -f  deploy.yaml

2.3 查看

PS:namespace为ingress-nginx

[root@master yaml]# kubectl get pod -o wide -n ingress-nginx 
NAME                                        READY   STATUS      RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-qqjz2        0/1     Completed   0          3m30s   10.244.1.9     node02   <none>           <none>
ingress-nginx-admission-patch-7xkk8         0/1     Completed   0          3m30s   10.244.2.7     node01   <none>           <none>
ingress-nginx-controller-6584bf6bc8-hj9zk   1/1     Running     0          3m30s   192.168.1.41   node01   <none>           <none>

[root@master yaml]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.97.134.37    <none>        80:31126/TCP,443:31537/TCP   3m23s
ingress-nginx-controller-admission   ClusterIP   10.96.170.183   <none>        443/TCP                      3m23s

2.4 查看INGRESS-NGINX-CONTROLLER容器内部详情

PS:它现在已经有一个模板,用来描述Ingress资源能够收集到的信息了

[root@master yaml]# kubectl  exec  -it -n ingress-nginx ingress-nginx-controller-6584bf6bc8-hj9zk sh
/etc/nginx $ cat nginx.conf
......
location / {
			
			set $namespace      "";
			set $ingress_name   "";
			set $service_name   "";
			set $service_port   "";
			set $location_path  "/";
......

3.基于HTTPD的访问

3.1 创建对应的INGRESS规则

[root@master yaml]# vim ingress-httpd.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name:  web-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: wwww.ingress.com
    http:
      paths:
      - path: /nginx
        backend:
          serviceName:  nginx-svc
          servicePort:  80
      - path: /httpd
        backend:
          serviceName:  httpd-svc
          servicePort:  80

[root@master yaml]# kubectl  apply  -f  ingress-httpd.yaml 
ingress.extensions/web-ingress created

3.2 查看对应规则的详细信息

[root@master yaml]#  kubectl  describe  ingresses. web-ingress
Name:             web-ingress
Namespace:        default
Address:          192.168.1.41
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  web.ingress.com  
                   /nginx   nginx-svc:80 (10.244.1.2:80,10.244.2.2:80,10.244.2.3:80)
                   /httpd   httpd-svc:80 (10.244.1.3:80,10.244.1.4:80,10.244.2.4:80)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"web-ingress","namespace":"default"},"spec":{"rules":[{"host":"web.ingress.com","http":{"paths":[{"backend":{"serviceName":"nginx-svc","servicePort":80},"path":"/nginx"},{"backend":{"serviceName":"httpd-svc","servicePort":80},"path":"/httpd"}]}}]}}

  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  50s   nginx-ingress-controller  Ingress default/web-ingress
  Normal  UPDATE  3s    nginx-ingress-controller  Ingress default/web-ingress

3.3 查看INGRESS-NGINX-CONTROLLER容器内部详情

[root@master yaml]# kubectl  exec  -it -n ingress-nginx ingress-nginx-controller-6584bf6bc8-hj9zk sh
/etc/nginx $ cat nginx.conf
......
	location ~* "^/nginx" {
			
			set $namespace      "default";
			set $ingress_name   "web-ingress";
			set $service_name   "nginx-svc";
			set $service_port   "80";
			set $location_path  "/nginx";
......
	location ~* "^/httpd" {
			
			set $namespace      "default";
			set $ingress_name   "web-ingress";
			set $service_name   "httpd-svc";
			set $service_port   "80";
			set $location_path  "/httpd";
......

3.4 访问

PS:有DNS的话可以设置解析,没有的话必须在host文件下添加域名解析才可访问

winows:C:\Windows\System32\drivers\etc\

linux:/etc/hosts

[root@client ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.41 wwww.ingress.com 

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算

4.基于HTTP实现虚拟机主机的访问

4.1 创建INGRESS规则

[root@master yaml]# vim ingress.yaml 

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ingress1
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress1.web.io
    http:
      paths:
      - path: /nginx
        backend:
          serviceName: nginx-svc
          servicePort: 80
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ingress2
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress2.web.io
    http:
      paths:
      - path: /httpd
        backend:
          serviceName: httpd-svc
          servicePort: 80

[root@master yaml]# kubectl  apply  -f  ingress.yaml 
ingress.extensions/ingress1 created
ingress.extensions/ingress2 created

4.2 查看对应的INGRESS规则

[root@master yaml]# kubectl  describe  ingresses. ingress1 
Name:             ingress1
Namespace:        default
Address:          192.168.1.41
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  ingress1.web.io  
                   /nginx   nginx-svc:80 (10.244.1.2:80,10.244.2.2:80,10.244.2.3:80)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"ingress1","namespace":"default"},"spec":{"rules":[{"host":"ingress1.web.io","http":{"paths":[{"backend":{"serviceName":"nginx-svc","servicePort":80},"path":"/nginx"}]}}]}}

  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  71s   nginx-ingress-controller  Ingress default/ingress1
  Normal  UPDATE  39s   nginx-ingress-controller  Ingress default/ingress1
[root@master yaml]# kubectl  describe  ingresses. ingress2
Name:             ingress2
Namespace:        default
Address:          192.168.1.41
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  ingress2.web.io  
                   /httpd   httpd-svc:80 (10.244.1.3:80,10.244.1.4:80,10.244.2.4:80)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"ingress2","namespace":"default"},"spec":{"rules":[{"host":"ingress2.web.io","http":{"paths":[{"backend":{"serviceName":"httpd-svc","servicePort":80},"path":"/httpd"}]}}]}}

  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  73s   nginx-ingress-controller  Ingress default/ingress2
  Normal  UPDATE  41s   nginx-ingress-controller  Ingress default/ingress2

4.3 访问

[root@node02 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.41 ingress1.web.io  ingress2.web.io

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算

5.基于HTTPS的访问

5.1 创建证书

[root@master yaml]# mkdir https
[root@master yaml]# cd https/
[root@master https]# openssl  req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
Generating a 2048 bit RSA private key
.......................................+++
.....................................................+++
writing new private key to 'tls.key'
-----
[root@master https]# ls
tls.crt  tls.key

5.2 用SECRET创建资源,将证书保存到K8S集群中

[root@master https]# kubectl  create  secret  tls tls-secret --key=tls.key --cert tls.crt 
secret/tls-secret created

5.3 创建DEPLOYMENT和对应INGRESS规则

[root@master https]# vim deploy.yaml 

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpds
spec:
  replicas: 2
  template: 
    metadata:
      labels:
        app:  httpd
    spec:
      containers:
      - name: httpd
        image:  httpd
---
kind: Service
apiVersion: v1
metadata:
  name: httpdsvc-1
spec:
  selector: 
    app:  httpd
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80 
[root@master https]# kubectl  apply  -f  deploy.yaml 
deployment.extensions/httpds created
service/httpdsvc-1 created
[root@master https]# vim ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: https
spec:
  tls:
    - hosts:
      - ingress.httpd.com
      secretName: tls-secret
  rules:
  - host: ingress.httpd.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpdsvc-1
          servicePort: 80

[root@master https]# kubectl  apply  -f  ingress.yaml 
ingress.extensions/https created

5.4 访问

[root@node02 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.41 ingress1.web.io  ingress2.web.io  ingress.httpd.com

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算

k8s ingress 外部访问,# Kubernetes,运维,大数据,云计算文章来源地址https://www.toymoban.com/news/detail-804103.html

到了这里,关于K8S集群实现外部访问(INGRESS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 外部节点访问 k8s 集群内的 starrocks

    用kubeadm在虚拟机搭建了k8s,按starrocks官网步骤,用k8s部署了starrocks 部署成功: 在 k8s集群内节点访问到 sr:(通过 clusterIP )  k8s 节点内访问成功: ​​​​​​​  尝试在集群外访问sr:  修改完成后查看端口 集群外部的客户端访问不了,错误是 BE 节点 not found 本地无法

    2024年02月13日
    浏览(30)
  • k8s---ingress实现https代理访问

    创建证书 密钥 secrets保存密钥信息,部署pod时把secrets挂载到pod 也可以实现负载均衡。 traefik ingress controller traefik 是一个为了让部署微服务更加快捷而诞生的一个http反向代理,负载均衡。 traefik设计时就能够实时的和k8s API交互,可以感知后端service和pod的变化,还可以自动更新

    2024年01月19日
    浏览(33)
  • k8s自定义Endpoint实现内部pod访问外部应用

    endpoint除了可以暴露pod的IP和端口还可以代理到外部的ip和端口 使用场景 公司业务还还没有完成上云, 一部分云原生的,一部分是实体的 业务上云期间逐步实现上云,保证各个模块之间的解耦性 比如使用云数据库或者实体数据库服务器啥的,因为像数据库实现容器化的话在

    2024年01月25日
    浏览(40)
  • k8s集群使用ingress转发grafana服务

    在k8s集群中,使用ingress服务转发grafana的页面。 ingress方面增加路由规则和跨命名空间的service即可 grafana增加configmap挂载grafana.ini文件,增加匿名登陆配置和root_url配置 grafana.ini文件的yaml文件 grafana启动服务的yaml文件 我这里使用的pvc的存储类型是rook-ceph,使用其他存储类型的修

    2024年02月09日
    浏览(28)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(41)
  • K8s集群nginx-ingress监控告警最佳实践

    本文分享自华为云社区《K8s集群nginx-ingress监控告警最佳实践》,作者:可以交个朋友。 nginx-ingress作为K8s集群中的关键组成部分。主要负责k8s集群中的服务发布,请求转发等功能。如果在访问服务过程中出现404和502等情况,需要引起注意。 可以通过CCE集群插件kube-prometheus-s

    2024年04月22日
    浏览(25)
  • k8s ingress访问响应慢的问题(阿里云环境)

       生产环境采用的是ingress,对接阿里云SLB,但出现了多次访问服务就会有一次响应特别慢的故障,记录一下处理方法。    后端ingress的pod 上进行抓包,抓一下ingress的网络流量,多访问复现几次问题,看看从ingress pod 的网络抓包里看看能否看到访问超时的情况,从网络连接

    2024年02月02日
    浏览(33)
  • 一文读懂k8s的外网访问方式,Ingress/NodePort/LoadBanlancer

    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注\\\"慕课网\\\"! 作者:一凡|慕课网讲师 在k8s中创建的微服务,大部分都是在集群内部互相调用,这时候,使用DNS就可以很方面访问。 比如:服务名是 my-service,端口号是8080,命名空间是yifan,那么就可以

    2024年02月10日
    浏览(40)
  • K8S 集群应用配置coredns实现访问内网域名 —— 筑梦之路

    问题: 在内网环境中,服务器不能连接互联网,某些服务直接使用ip访问又不方便,于是直接在hosts中配置域名解析,而K8S集群中的应用需要访问这些服务,pod容器内却不能解析,此时该怎么解决呢? 解决方法: 第一种方法:内网自建DNS服务,每台主机DNS都指向该dnsf服务器

    2024年02月15日
    浏览(29)
  • 从外部访问K8s中Pod的五种方式

    hostNetwork、 hostPort、 NodePort、 LoadBalancer、 Ingress 暴露Pod与Service一样,因为Pod就是Service的backend 这是一种直接定义 Pod 网络的方式。 如果在 Pod 中使用 hostNetwork:true 配置, pod 中运行的应用程序可以直接看到 pod 启动的主机的网络接口。 在主机的所有网络接口上都可以访问到该

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包