go - 使用 operator-framework 负载平衡 K8s Pod

标签 go kubernetes kubernetes-helm kubernetes-ingress

我通过调整 memcached 示例构建了一个简单的运算符。唯一的主要区别是我的 pod 中需要两个 docker 镜像。让部署运行。我的 test.yaml 曾经使用 kubectl 进行部署。

apiVersion: "cache.example.com/v1alpha1"
kind: "Memcached"
metadata:
  name: "solar-demo"
spec:
  size: 3
  group: cache.example.com
  names:
    kind: Memcached
    listKind: MemcachedList
    plural: solar-demos
    singular: solar-demo
  scope: Namespaced
  version: v1alpha1

不过,我仍然缺少一个部分——负载平衡部分。目前,在 Docker 下,我们使用 nginx 图像作为反向代理配置为:

upstream api_microservice {
  server api:3000;
}
upstream solar-svc_microservice {
  server solar-svc:3001;
}
server {
  listen $NGINX_PORT default;

  location /city {
    proxy_pass http://api_microservice;
  }

  location /solar {
    proxy_pass http://solar-svc_microservice;
  }

  root /html;
  location / {
    try_files /$uri /$uri/index.html /$uri.html /index.html=404;
  }
}

我希望我的集群公开端口 8080 并转发到端口 30003001 到我在 Pod 中运行的图像。

我的部署:

dep := &appsv1.Deployment{
    TypeMeta: metav1.TypeMeta{
        APIVersion: "apps/v1",
        Kind:       "Deployment",
    },
    ObjectMeta: metav1.ObjectMeta{
        Name:      m.Name,
        Namespace: m.Namespace,
    },
    Spec: appsv1.DeploymentSpec{
        Replicas: &replicas,
        Selector: &metav1.LabelSelector{
            MatchLabels: ls,
        },
        Template: v1.PodTemplateSpec{
            ObjectMeta: metav1.ObjectMeta{
                Labels: ls,
            },
            Spec: v1.PodSpec{
                Containers: []v1.Container{
                    {
                        Image:   "shmukler/docker_solar-svc",
                        Name:    "solar-svc",
                        Command: []string{"npm", "run", "start-solar-svc"},
                        Ports: []v1.ContainerPort{{
                            ContainerPort: 3001,
                            Name:          "solar-svc",
                        }},
                    },
                    {
                        Image:   "shmukler/docker_solar-api",
                        Name:    "api",
                        Command: []string{"npm", "run", "start-api"},
                        Ports: []v1.ContainerPort{{
                            ContainerPort: 3000,
                            Name:          "solar-api",
                        }},
                    },
                },
            },
        },
    }

我需要添加什么来让 ingress 或在我的 pod 前面运行的东西?

谢谢

最佳答案

What do I need to add have ingress or something running in front of my pods?

是的,Ingress专为此类任务而设计。

Ingress 有一个path-based 路由,它将能够设置与您在使用 Nginx 的示例中提到的相同的配置。此外,Ingress 最流行的实现之一是作为代理的 Nginx

Ingress 基本上是一组规则,允许流量(否则被丢弃或转发到其他地方)到达集群服务。
这是 Ingress 配置的示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app
spec:
  rules:
  - host: '' # Empty value means ‘any host’
    http:
      paths:
      - path: /city
        backend:
          serviceName: myapp
          servicePort: 3000
      - path: /solar
        backend:
          serviceName: myapp
          servicePort: 3001

此外,因为 Pod 不是静态的,您应该创建一个 Service 对象,它将作为您应用程序的 Ingress< 的静态入口点.

这是服务的一个例子:

kind: Service
apiVersion: v1
metadata:
  name: myapp
spec:
  selector:
    app: "NAME_OF_YOUR_DEPLOYMENT"
  ports:
  - name: city
    protocol: TCP
    port: 3000
    targetPort: 3000
  - name: solar
    protocol: TCP
    port: 3001
    targetPort: 3001

关于go - 使用 operator-framework 负载平衡 K8s Pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024198/

相关文章:

amazon-web-services - 错误 : file 'home/user/values.yaml' seems to be a YAML file, 但需要 gzip 压缩的存档

string - 戈朗 : bitwise operation on very long binary bit string representation

戈朗 : Parse bit values from a byte

kubernetes - kubectl获取componentStatus显示额外的etcd实例

kubernetes - Helm charts vs ansible-playbook vs k8s operator 在系统安装中

go - Helm : How to convert a string into lower/upper case inside if-else condition?

string - 将字符串转换为 Foo(类型字符串)

go - 从某个 channel 接收到无处可去的地方

amazon-web-services - 在 CodeBuild 阶段运行 kubectl apply -f hello-k8s.yml 时出现 "Unable to recognize\"hello-k8s.yml\": Unauthorized"错误

docker - 使用从属性文件创建的 ConfigMap 条目