小编bre*_*uts的帖子

为 Kubernetes 中运行的剩余映射器创建假数据

我可以在提供 kubeconfig 时运行以下代码。这样做我能够获得以下值gr

\n
func (o *ApplyOptions) RestMapper() (meta.RESTMapper, error) {\n    gr, err := restmapper.GetAPIGroupResources(o.discoveryClient)\n    if err != nil {\n        return nil, err\n    }\n    mapper := restmapper.NewDiscoveryRESTMapper(gr)\n    return mapper, nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后我启动了以下代码:

\n
var kubeconfig *string\n\nkubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")\n\nflag.Parse()\n\n// use the current context in kubeconfig\nconfig, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)\nif err != nil {\n    panic(err.Error())\n}\n\ndynamicClient, err := dynamic.NewForConfig(config)\nif err != nil {\n    panic(err.Error())\n}\ndiscoveryClient, err := discovery.NewDiscoveryClientForConfig(config)\nif err != nil {\n …
Run Code Online (Sandbox Code Playgroud)

azure go kubernetes

9
推荐指数
1
解决办法
752
查看次数

k8s如何执行distroless容器

我想从 cronJob 删除特定文件到以下容器,问题是当我运行 exec 时出现错误,如何 exec 到 distroless 容器(k8s v1.22.5)并从 cronJob 删除文件,哪个选项我们是否有?

这是部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: distro
  labels:
    app: distro
spec:
  replicas: 1
  selector:
    matchLabels:
      app: distro
  template:
    metadata:
      labels:
        app: distro
    spec:
      containers:
        - name: edistro
          image: timberio/vector:0.21.X-distroless-libc
          ports:
            - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

我尝试过的是

apiVersion: apps/v1
kind: Deployment
metadata:
  name: distro
  labels:
    app: distro
spec:
  replicas: 1
  selector:
    matchLabels:
      app: distro
  template:
    metadata:
      labels:
        app: distro
    spec:
      containers:
        - name: edistro
          image: timberio/vector:0.21.X-distroless-libc
          ports:
            - containerPort: 80 …
Run Code Online (Sandbox Code Playgroud)

containers docker kubernetes

9
推荐指数
1
解决办法
4583
查看次数

K8S 获取部署活跃度探测状态

我们已经在我们的部署资源中定义了 K8s liveness 和 readiness probes (我们已经在那里挑战了 liveness ...),我们需要使用client-golib 来访问这个 liveness probe,我们怎么做?

我已经用client-golib试过了

https://github.com/kubernetes/client-go

如下:

client.Discovery().RESTClient().Get()
Run Code Online (Sandbox Code Playgroud)

我也试着玩的去图书馆,但没有发现任何部署的财产client.CoreV1()。但是我确实找到了service pod等等。我在这里错过了什么?

PodList, err := client.CoreV1().Pods("mynamespace").List(metav1.ListOptions{LabelSelector: "run=liveness-app"})

最后,我需要根据部署中定义的活性探针获取 pod 活性状态。我的意思是生或死

go kubernetes

7
推荐指数
1
解决办法
676
查看次数

GO - Docker 在 K8S 容器上询问证书

我在这个库中使用以下代码

provider, err := oidc.NewProvider(ctx, providerURI)
if err != nil {
    log.Println(err)
}
Run Code Online (Sandbox Code Playgroud)

使用相同的 providerURI在本地运行它时可以工作,但我能够成功获得提供者!

我使用完全相同的提供程序 url(作为env变量)将它部署到 K8S并使用调试port-forwarding,但是,在 k8S 中我遇到错误并且没有得到provider.

错误是:

2020/08/14 16:42:22 Get "https://ace.svar.com/.well-known/openid-configuration": x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

我已将证书添加到图像并验证它exec部署后我进入 k8s 容器,我看到路径server.crt下的文件/usr/local/share/ca-certificates/

仍然有同样的错误,不知道我是否在这里错过了其他东西......不确定它是否真的与 OIDC lib 或更一般的东西有关..

FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
ADD server.crt /usr/local/share/ca-certificates/server.crt
RUN chmod 644 /usr/local/share/ca-certificates/server.crt && …
Run Code Online (Sandbox Code Playgroud)

certificate go docker openid-connect kubernetes

6
推荐指数
1
解决办法
383
查看次数

监视特定对象的事件

我们有一个 k8s 运算符(基于 kubebuilder),它按预期工作,现在我们需要支持侦听集群上的机密。

以下代码正在运行,但是我收到了集群中所有秘密的事件,但效率不高

我只想获取特定秘密的事件,让我们说特定秘密的事件labels/annotation,我们该怎么做?

func (r *InvReconciler) SetupWithManager(mgr ctrl.Manager) error {
    manager := ctrl.NewControllerManagedBy(mgr).
        For(&corev1alpha1.Inv{}, builder.WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))).
        WithOptions(controller.Options{
        })

    manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
        return r.secretHandler.GetSecret(a.GetNamespace(), a.GetName())
    }))

    return manager.Complete(r)
}
Run Code Online (Sandbox Code Playgroud)

这是函数

func (secretReq secretHandler) GetSecret(namespace string, name string) []reconcile.Request {

    fmt.Println("secret is: ", namespace, "--", name)
    return nil
}
Run Code Online (Sandbox Code Playgroud)

让我们说像下面这样的秘密,并且仅对于这个秘密(带标签foo: bar)我会在创建或修改它时收到事件

apiVersion: v1
kind: Secret
metadata:
  labels:
    foo: bar
  name: mysecret
  namespace: dev
type: Opaque
data: …
Run Code Online (Sandbox Code Playgroud)

azure go kubernetes kubebuilder

6
推荐指数
1
解决办法
1933
查看次数

k8s 检查 pod securityContext 定义

我想检查集群中的 pod 是否运行为privileged pods,这可能表明我们可能存在安全问题,因此我检查是否 privileged: true

然而,在 securityContext:规范下还有其他字段,例如

  • allowPrivilegeEscalation
  • RunAsUser
  • ProcMount
  • Capabilities ETC

这可能有风险(不确定),

我的问题是,如果 Pod 被标记为,privileged:false并且其他字段都为 true,如下例所示,这是否表明存在某些安全问题?该 Pod 是否可以对其他 Pod等执行某些操作,访问外部数据?

例如,以下配置表明 pod 没有特权,但是allowPrivilegeEscalation: true

securityContext:
  allowPrivilegeEscalation: true
  privileged: false
Run Code Online (Sandbox Code Playgroud)

我想知道哪个securityContextPod 配置组合可以控制集群中的其他 Pod ? pods/process

linux security azure amazon-web-services kubernetes

6
推荐指数
1
解决办法
1232
查看次数

K8s控制器更新状态和条件

我有 k8s 控制器,需要安装一些资源并相应地更新状态和条件

\n

协调的流程如下:

\n
    \n
  1. 安装资源并不要\xe2\x80\x99t等待
  2. \n
  3. 如果准备好/待安装/错误,则调用该函数checkAvailability并相应更新状态
  4. \n
\n

我\xe2\x80\x99有两个主要问题:

\n
    \n
  1. 这是我第一次使用状态和条件,这是正确的方式还是我错过了什么
  2. \n
  3. 有时,当我进行更新时,r.Status().Update我收到错误:Operation cannot be fulfilled on eds.core.vtw.bmw.com \xe2\x80\x9cresouce01\xe2\x80\x9d: the object has been modified; please apply your changes to the latest version and try again , so I\xe2\x80\x99ve added the check conditionChanged`,它解决了问题,但不确定它是否正确,因为我更新了一次状态,如果它不\xe2\x80\x99t高喊,我不\xe2\x80\x99t触摸它,所以用户可以看到不久前的就绪状态,并且协调不会更新就绪条件的日期和时间,因为它在已经 \xe2\x80\x9cready\xe2\x80\x9d 时跳过它
  4. \n
\n

我用以下

\n
func (r *ebdReconciler) checkHealth(ctx context.Context, req ctrl.Request, ebd ebdmanv1alpha1.ebd) (bool, error) {\n    vfmReady, err := r.mbr.IsReady(ctx, req.Name, req.Namespace)\n    condition := metav1.Condition{\n        Type: …
Run Code Online (Sandbox Code Playgroud)

azure go kubernetes

6
推荐指数
1
解决办法
1312
查看次数

用于调试的 Golang docker 文件

我有以下适用于我的应用程序的 docker 文件。我能够访问简单的网络应用程序服务器。

FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
RUN mkdir /app

ADD . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -gcflags="all=-N -l" -o main ./...

FROM alpine:3.12.0 AS production
COPY --from=builder /app .
EXPOSE 8000 40000
ENV PORT=8000
CMD ["./main"]
Run Code Online (Sandbox Code Playgroud)

当我像下面那样采用它时,我无法将其成功部署到 Kubernetes。容器因一些一般错误而崩溃,而不是我可以使用的东西。

standard_init_linux.go:190: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)

这不起作用

FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
RUN mkdir /app

ADD . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -gcflags="all=-N -l" …
Run Code Online (Sandbox Code Playgroud)

go docker kubernetes dockerfile

5
推荐指数
1
解决办法
1490
查看次数

使用 API 调用创建自耕农生成器

我已经创建了一个可以正常工作的 Yeoman 生成器,现在我需要用另外两个问题来扩展它。

这个问题我已经有了

async prompting() {
  const prompts = [
    {
      name: "appName",
      message: "Project name: ",
      type: "input",
      default: this.props!.appName,
      validate(input: string) {
        const appName = validateAppName(input);
        return !appName[1] ? appName[0] : true;
      },
    },
    {
      type: "list",
      name: "tech",
      message: "Which tech?”,
      default: “cloud”,
      choices: [{ name: “cloud”}, { name: “onPrem” }}],
    },
    },
  ];
Run Code Online (Sandbox Code Playgroud)

现在我需要添加其他问题,例如您要创建项目的命名空间

{
  type: “list”,
  name: "namespace",
  suggestOnly: false,
  message: "which namespace: ",
  source: Namespace.searchNS,
  when: () => !isEmpty(this.namespace!.namespaceInstances),
  validate(val: boolean) {
    return …
Run Code Online (Sandbox Code Playgroud)

javascript node.js yeoman typescript yeoman-generator

5
推荐指数
1
解决办法
170
查看次数

在 github actions 中保留 k8s 秘密

我们正在尝试使用github actions,并且我们希望保留敏感数据,例如kubeconfig在 github 中,secrets 我创建了一个名为 GitHub 的机密KUBECONFIG1

重现步骤

在 GitHub 秘密中,我应该存储以下文件,并尝试使用此https://onlineyamltools.com/convert-yaml-to-json转换为 JSON

apiVersion: v1
kind: Config
clusters:
  - name: brf
    cluster:
      certificate-authority-data: >-
        LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURTakNBd0t6RXBNQ2NHQTFVRUF4TWdkbWx5ZE2bUljTlRtakFWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
      server: 'https://vfg.canary.k8s.ondemand.com'
users:
  - name: user1
    user:
      token: >-
        eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuW1lc3BhY2UiOiJnYXJkZW4tZGV2e
contexts:
  - name: g-root
    context:
      cluster: garv
      user: robot
      namespace: gking
current-context: gaot

Run Code Online (Sandbox Code Playgroud)

在 github actions 工作流程中,我们保留上面的文件内容及其名称KUBECONFIG1,并从中创建 k8s 秘密。

name: Example action

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v2
      - name: install …
Run Code Online (Sandbox Code Playgroud)

json github go kubernetes github-actions

5
推荐指数
1
解决办法
3027
查看次数

GO 获取 K8S api 服务器健康状态

我有一个 golang 程序,我需要向K8S API server状态 (livez) api添加一个新调用以获取健康状态。

https://kubernetes.io/docs/reference/using-api/health-checks/

该程序应该在 api 服务器的同一个集群上运行并需要获取/livez状态,我试图在 client-go lib 中找到这个 API,但没有找到实现它的方法......

https://github.com/kubernetes/client-go

有没有办法从运行在 API 服务器运行的同一个集群上的 Go 程序中做到这一点?

go kubernetes

4
推荐指数
1
解决办法
931
查看次数

创建k8s资源并等待完成继续下一步

我需要创建一个 k8s 资源,这需要一些时间才能可用,为此我使用以下命令

https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil#example-CreateOrUpdate

op, err := controllerutil.CreateOrUpdate(context.TODO(), c, deploy, func() error {

})

func2()
Run Code Online (Sandbox Code Playgroud)

func2 现在我需要在对象创建完成后立即调用(可能需要 2-3 分钟才能完成),我应该如何做?

我发现了这个,但不知道如何将它们结合起来......

https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg#hdr-Watching_and_EventHandling

我正在使用 kubebuilder

azure go amazon-web-services google-cloud-platform kubernetes

3
推荐指数
1
解决办法
1451
查看次数