【从零开始搭建k8s v1.24集群】Chapter 4 通过外部域名访问kubernetes集群服务

Ingress

Ingress是外部访问集群的方式

部署方式

ingress-controller有多种提供方,kubernetes官方推荐ingress-nginx-controller。这里是链接。部署ingress-nginx-controller时,如果采用LoadBalancer,则需要云服务提供商。一般我们都是进行独立的私有化部署,因此默认的LoadBalancer方式部署并不适用

官方提供了多种解决方案,以下部分方案说明,所有方案参考bare metal

  1. 使用NodePort方式部署ingress-nginx-controller。缺点是端口不固定,创建ingress后需要通过xxx.example.com:port的方式进行访问。
  2. 开源LoadBalancer项目MetalLB。解决LoadBalancer必须使用云提供商的痛点,但是一开始是个人项目,目前由个人团队维护,处于beta阶段。

ingress部署镜像下载问题

使用的镜像为google的gcr镜像,国内无法访问。好心人已经在DockerHub上传了这些镜像,可以在DockerHub上搜索ingress-nginx-controller和kube-webhook-certgen,pull下来后push到自己搭建的镜像仓库中,再修改部署yaml文件中的image即可成功部署。

部署MetalLB作为LoadBalancer

准备工作#
首先需要部署好ingress-nginx,然后修改kube-proxy配置

kubectl edit configmap -n kube-system kube-proxy

按照下面设置

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

安装metallb

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.3/config/manifests/metallb-native.yaml

假设外部域名都解析到master节点,则metallb的ip地址池可以配置成固定的master节点的ip(192.168.3.81),按照下面配置创建资源:

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: public-ips
  namespace: metallb-system
spec:
  addresses:
  - 192.168.3.81/32

创建好ip地址池后ingress-nginx命名空间下的ingress-nginx-controller会从pending状态变成running状态(如果没有请修改成NodePort再修改成LoadBalancer),并且分配外部endpoints 192.168.3.81:80和192.168.3.81:443。此时创建好ingress就可以通过域名的方式访问集群中的服务。例如:

kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo
kubectl create ingress ing-demo --class=nginx --rule="demo.k8s-app.com/*=demo:80"

注意:通过外部域名访问需要预先在dns服务器(可以使用bind9搭建)中配置好*.k8s-app.com解析到192.168.3.81。此时访问demo.k8s-app.com会显示It works!。

dashboard配置外部域名访问

如果已经部署了ingress,要通过域名访问dashboard,可以按照如下创建ingress,修改其中的host。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/configuration-snippet: |-
      proxy_ssl_server_name on;
      proxy_ssl_name $host;
spec:
  rules:
  - host: dashboard.k8s-app.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从零开始搭建一个 Kubernetes(简称K8s集群可以按照以下步骤进行: 1. 选择操作系统:选择适合你的需求的操作系统,比如Ubuntu、CentOS等。 2. 安装DockerKubernetes使用Docker容器来运行应用程序,因此需要先安装Docker。可以通过官方文档来安装适合你操作系统版本的Docker。 3. 安装Kubernetes的控制节点(Master):在控制节点上安装Kubernetes的各个组件,包括kube-apiserver、kube-controller-manager、kube-scheduler等。可以通过二进制文件手动安装,或者使用Kubeadm工具来简化安装过程。 4. 配置网络:配置网络使得集群内的各个节点能够相互通信。可以选择使用Flannel、Calico等网络插件来实现网络配置。 5. 添加工作节点(Worker):在工作节点上安装DockerKubernetes的各个组件,比如kubelet和kube-proxy。可以使用同样的方式安装DockerKubernetes组件。 6. 加入工作节点到集群:在控制节点上使用Kubeadm工具将工作节点加入到集群中。 7. 部署应用程序:通过Kubernetes的资源对象(如Pod、Service、Deployment等)来部署应用程序。可以使用kubectl命令行工具或者YAML文件来定义和创建这些资源对象。 以上是一个大致的搭建Kubernetes集群的步骤,具体的安装和配置过程可能会因为操作系统和版本的不同而有所差异。你可以参考官方文档或者一些教程来获取更详细的指导。同时,搭建Kubernetes集群需要一定的系统管理和网络知识,确保你有足够的了解和准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值