简体   繁体   English

如何使用 Terraform 在 K8S 集群机器上创建入口?

[英]How to create ingress on K8S Cluster machine using Terraform?

I am new to K8S and Terraform.我是 K8S 和 Terraform 的新手。 I installed ingress_nginx on K8S Cluster running on Bare-metal.我在裸机上运行的 K8S 集群上安装了 ingress_nginx。

[root@control02 ~]# kubectl get svc -n ingress-nginx
    NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    docker-hello-world-svc               NodePort    10.xx.xx.121     <none>        8086:30333/TCP               13d
    ingress-nginx-controller             NodePort    10.xx.xx.124     <none>        80:31545/TCP,443:30198/TCP   13d
    ingress-nginx-controller-admission   ClusterIP   10.xx.xx.85      <none>        443/TCP                      13d

I created Deployment, Service and Ingress and am able to access the docker-hello-world-svc from browser successfully.我创建了部署、服务和入口,并且能够从浏览器成功访问 docker-hello-world-svc。 Ingress.yaml is given below Ingress.yaml如下所示

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ing
  annotations:
    kubernetes.io/ingress.class: "nginx"
  namespace: ingress-nginx
spec:
  #ingressClassName : nginx
  rules:
  - host: foo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
           name: docker-hello-world-svc
           port:
            number: 8086

My requirement is to containerize our PHP based applications on K8S Cluster.我的要求是将我们基于 PHP 的应用程序容器化到 K8S 集群上。

  1. Creating ingress via Terraform's resource "kubernetes_ingress" "web" and ingress.yaml:kubernetes.io/ingress.class are same (or) are they different?通过Terraform 的resource "kubernetes_ingress" "web"ingress.yaml:kubernetes.io/ingress.class创建入口,它们是相同的吗?

  2. How can I create 'ingress' on K8S Cluster machine using Terraform?如何使用 Terraform 在 K8S 集群机器上创建“入口”?

    For example, when I trigger a job from GitLab, Terraform should create a new "resource kubernetes_ingress" on K8S Cluster or Control-Plane machine.例如,当我从 GitLab 触发作业时,Terraform 应该在 K8S 集群或控制平面机器上创建一个新的"resource kubernetes_ingress" Is this possible?这可能吗?

Kindly clarify on the queries mentioned above and let me know if my understanding is wrong请澄清上述问题,如果我的理解有误,请告诉我

The ingress.class is needed to let the nginx ingress controller understand thathe need to handle this resource.需要ingress.class让 nginx 入口 controller 明白他需要处理这个资源。

To create an ingress with terraform you can use the following要使用 terraform 创建入口,您可以使用以下命令

resource "kubernetes_ingress" "ingress" {
  metadata {
    name      = "ingress-name"
    namespace = "ingress-namespace"
    labels = {
      app = "some-label-app"
    }
    annotations = {
      "kubernetes.io/ingress.class" : "nginx"
    }
  }

  spec {
    rule {
      host = "foo.com"
      http {
        path {
          backend {
            service_name = "svc"
            service_port = "http"
          }
        }
      }
    }
  }
}

I was able to create the service on existing K8S Cluster (Bare metal) using the following code我能够使用以下代码在现有 K8S 集群(裸机)上创建服务

K8S Cluster was setup on 192.168.xxx.xxx on which I created a service example . K8S 集群设置在192.168.xxx.xxx上,我在上面创建了一个服务example We need to mention the 'host' parameter inside 'kubernetes' block我们需要在'kubernetes'块中提及'host'参数

provider "kubernetes" {
    **host = "https://192.168.xxx.xxx:6443"**
    cluster_ca_certificate = "${base64decode(var.cluster_ca_certificate)}"
    client_certificate = "${base64decode(var.client_certificate)}"
    client_key = "${base64decode(var.client_key)}"
}
  
  resource "kubernetes_service" "example" {
    metadata {
      name = "example"
    }
    spec {
      port {
        port = 8585
        target_port = 80
      }
      type = "ClusterIP"
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM