AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[aks](server)

Martin Hope
Sentrigan
Asked: 2021-11-10 07:22:38 +0800 CST

如何在私有 AKS 群集中公开服务?

  • 1

我在 AKS 上创建了一个专用集群并向其部署了一些工作负载,但我不确定如何连接到这些服务。它们都是 NodePort 服务,包括 TCP 和 UDP。

最初,我认为 AKS 提供的端点可用于与整个集群进行交互,但事实并非如此——这只公开了 Kubernetes API(可能是他们将其称为 API 端点的原因)

我也尝试过使用 VMSS 公共 IP,但也没有用。使用实例 IP 是可行的,但 IP 会随着时间而改变,对吧?

最终我决定使用入口控制器并代理流量,但因为我使用的是混合协议,所以我需要两个。更不用说这似乎太复杂而无法合理解决这个问题。

如何在专用 AKS 群集上公开服务?我认为这应该是一个很常见的问题,但我还没有找到明确的解决方案

networking kubernetes azure aks
  • 1 个回答
  • 267 Views
Martin Hope
thxmike
Asked: 2021-09-21 05:43:43 +0800 CST

在 AKS 上使用 Helm 的 Kubernetes NGINX 入口控制器失败

  • 0

设置 K8 入口控制器时,此处记录

我无法通过“创建入口控制器”步骤在 Helm 命令步骤并将命令置于调试模式期间,我看到其中一个步骤超时:

预安装失败:等待条件超时

查看K8 POD日志后发现K8系统因为auth错误无法连接registry。出于安全原因,以下输出已被修改,但显示错误

Failed to pull image "myregistry.azurecr.io/jettech/kube-webhook-certgen:v1.5.1@sha256:...90bd8068": [rpc error: code = NotFound desc = failed to pull and unpack image "....azurecr.io/jettech/kube-webhook-certgen@sha256:....9b9e90bd8068": failed to resolve reference "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...190b1dcbcb9b9e90bd8068": ....azurecr.io/jettech/kube-webhook-certgen@sha256:...9b9e90bd8068: not found, rpc error: code = Unknown desc = failed to pull and unpack image "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...dcbcb9b9e90bd8068": failed to resolve reference "myregistry.azurecr.io/jettech/kube-webhook-certgen@sha256:...b9b9e90bd8068": failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized]

我已经根据“az acr import”命令验证了图像位于容器注册表中,并且如果我使用“kubectl”进行标准K8部署,k8能够连接到acr。我还使用以下命令验证了集群和注册表之间的连接,它按预期工作:

az aks check-acr -n <cluster> -g <rg>  --acr <acr>

此故障仅在使用 helm 命令时发生。

编辑

在研究了更多之后,我发现了以下文章

https://stackoverflow.com/questions/68949434/installing-nginx-ingress-controller-into-aks-cluster-cant-pull-image-from-azu

看来摘要有问题。我在 helm 命令中添加/替换了以下内容:

--set controller.image.digest="sha256:e9fb216ace49dfa4a5983b183067e97496e7a8b307d2093f4278cd550c303899" \
--set controller.admissionWebhooks.patch.image.digest="sha256:950833e19ade18cd389d647efb88992a7cc077abedef343fa59e012d376d79b7" \

但是,在运行修改后的 helm 命令时,POD 处于错误状态,并出现以下错误

unknown flag: --controller-class

我尝试设置环境变量 CONTROLLER_TAG=v1.0.0,如文章中所述,但这无济于事

另一种解决方法是在命令中设置版本号:3.36.0。这是成功的,但需要降级的版本

kubernetes azure aks helm
  • 1 个回答
  • 594 Views
Martin Hope
justin.m.chase
Asked: 2021-09-18 12:53:39 +0800 CST

通过 ARM/Bicep 模板将网络参与者角色分配给 AKS 群集的正确方法是什么?

  • 0

我正在尝试使用 Bicep/ARM 为我的 AKS 服务器配置负载均衡器。我在 kubernetes 中使用 NGinx 入口控制器,它似乎确实可以工作,但是当我第一次启动时,我遇到了一个错误。

主要是我想知道 Azure 文档中此步骤的等效 ARM 或 Bicep 模板是什么?

https://docs.microsoft.com/en-us/azure/aks/static-ip#create-a-service-using-the-static-ip-address

az role assignment create \
    --assignee <Client ID> \
    --role "Network Contributor" \
    --scope /subscriptions/<subscription id>/resourceGroups/<resource group name>

我正在使用 Bicep 并创建了我的 AKS 服务器,例如:

resource ExampleKubernetes 'Microsoft.ContainerService/managedClusters@2021-07-01' = {
  // ...
}

然后我向 kubelet 身份添加角色分配,如下所示:

var NetworkContibutor = '4d97b98b-1d4f-4787-a291-c67834d212e7'
resource AssignNetworkContributorToKubelet 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
  name: guid(resourceGroup().id, ExampleKubernetes.id, NetworkContibutor)
  dependsOn: [
    ExampleKubernetes
  ]
  properties: {
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', NetworkContibutor)
    principalType: 'ServicePrincipal'
    principalId: ExampleKubernetes.properties.identityProfile.kubeletidentity.objectId
  }
}

这似乎可行,我可以在仪表板中看到分配给托管主体的角色......但是 kubernetes 中的服务似乎仍然失败,并且仍然存在权限问题:

  Error syncing load balancer: failed to ensure load balancer: Retriable: false,
  RetryAfter: 0s, HTTPStatusCode: 403, RawError: Retriable: false, RetryAfter:
  0s, HTTPStatusCode: 403, RawError:
  {"error":{"code":"AuthorizationFailed","message":"The client
  '<some guid A>' with object id
  '<some buid A>' does not have authorization to perform
  action 'Microsoft.Network/publicIPAddresses/read' over scope
  '/subscriptions/<subid>/resourceGroups/example/providers/Microsoft.Network/publicIPAddresses/example'
  or the scope is invalid. If access was recently granted, please refresh your
  credentials."}}

奇怪的是,后来在某些时候它似乎只是神奇地工作。该错误显示“retriable false”,并且该服务似乎没有重试,但随后将 NGinx 部署到 kubernetes 将导致它重试并突然繁荣其工作。

似乎错误消息告诉我角色传播存在一些不确定的延迟......所以我的问题是:

  • 那正确吗?实际上只是延迟并且我的代码基本上是正确的吗?
  • 我使用了正确的 principalId 吗?或者这实际上是不必要的?
  • 有没有办法让我强制传播这些角色更新?如果需要,我可以在两者之间有一个 CLI 步骤。权限准备好后,如何等待安装连接到 LB 的入口控制器?
kubernetes azure aks azure-arm-template azure-networking
  • 1 个回答
  • 989 Views
Martin Hope
neomax
Asked: 2021-08-28 06:25:39 +0800 CST

在 Azure K8S 中运行的容器上的 iptables 中使用 fwmark

  • 0

我有一个奇怪的用例,在 Azure Kubernetes 中运行的 pod 需要通过专用 VPN 隧道将流量从特定端口路由到特定目标。但是这些目标是私有 IP,因此可以为不同的目标使用相同的 IP。除了路由之外的 pod 也是目标连接的 OpenVPN 服务器。一个例子:

到达端口 10 的通信通过 VPN IP 10.118.0.2 路由到 IP 10.0.0.4:80

同时我们可以拥有:

到达端口 20 的通信通过 VPN IP 10.118.0.3 路由到 IP 10.0.0.4:80

尽管目标 IP 相同,但它们是不同的机器。所以为了实现这一点,我想出了这个可能的解决方案:

/sbin/iptables --table mangle --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump MARK --set-mark "10"
/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip rule add prio "10" from all fwmark "10" lookup "10"
/sbin/ip route add "10.0.0.4" via "10.118.0.2" table 10

这将允许两个通信同时工作,并将流量路由到正确的机器。但我看到的是数据包在 mangle 表中被标记。但是永远不会到达 NAT 表。我发现它与rt_filter有关。更多关于下面的内容。就像现在一样,它正在工作,是这样的:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip route add "10.0.0.4" via "10.118.0.2"

但是,如果建立了第二条路由,就像在第一个示例中一样,命令将如下所示:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "20" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip route add "10.0.0.4" via "10.118.0.3"

这将在主路由表中为同一目标创建另一条路由。但是,当访问 192.168.0.100 时,用户可能会被路由到与 10.118.0.3 或 10.118.0.2 连接的机器。

除了这些规则之外,对于所有这些规则,始终启用该规则以允许流量返回到与 10.118.0.X 通信的 tap0 接口:

iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

不幸的是我不知道用户源IP,否则很容易解决。到达此端口的任何通信的源 IP 将始终相同,因为通信需要通过另一个服务来掩盖真实的源 IP。

我在其他主题中看到,为了标记容器/pod 中的传入数据包,我需要禁用 rt_filter。但是我不能这样做,它说它是一个只读文件系统,我不知道是否可以在 Azure Kubernetes 集群中更改它。

除了标记数据包,还有其他解决方案吗?还是有关数据包标记的其他内容?

iptables docker kubernetes azure aks
  • 1 个回答
  • 106 Views
Martin Hope
uday
Asked: 2021-08-04 00:32:53 +0800 CST

Azure Kubernetes 上的集群创建超出限制,在哪里清理?

  • 0

我通过完全删除资源组来删除旧集群。但是当我尝试创建一个新集群时,由于超出限制,我收到错误消息。

正如您在下面的错误中看到的那样。

{"code":"InvalidTemplateDeployment","message":"根据验证程序,模板部署 'microsoft.aks-20210803135741' 无效。跟踪 ID 为 '979df053-50fa-4201-9643-5f3029e0b43d'。请参阅详细信息的内部错误。","details":[{"code":"QuotaExceeded","message":"资源组中为容器服务 testingdelete 配置资源 testingdelete 失败。消息:{\n "code" : "QuotaExceeded",\n "message": "为资源组 testingdelete 中的容器服务 testingdelete 提供资源失败。消息:操作无法完成,因为它导致超出批准的总区域核心配额。其他详细信息 - 部署模型:资源管理器,位置:eastus2,当前限制:10,当前使用:10,需要额外:6,(最低)需要新限制:16。在 https://aka.ms/ProdportalCRP/?#create/Microsoft.Support 提交增加配额的请求/Parameters/%7B%22subId%22:**************************************** ****************************************************** ****************************************** 通过指定“详细信息”部分中列出的参数进行部署成功。请在 https://docs.microsoft.com/en-us/azure/azure-supportability/regional-quota-requests 阅读有关配额限制的更多信息。详细信息:“\n }。详细信息:”}]} ****************************************************** ****************************************************** ****************************** 通过指定“详细信息”部分中列出的参数以使部署成功。请在 https://docs.microsoft.com/en-us/azure/azure-supportability/regional-quota-requests 阅读有关配额限制的更多信息。详细信息:“\n }。详细信息:”}]} ****************************************************** ****************************************************** ****************************** 通过指定“详细信息”部分中列出的参数以使部署成功。请在 https://docs.microsoft.com/en-us/azure/azure-supportability/regional-quota-requests 阅读有关配额限制的更多信息。详细信息:“\n }。详细信息:”}]}

如何清理留下的旧细节?

kubernetes azure aks
  • 1 个回答
  • 234 Views
Martin Hope
uday
Asked: 2021-07-13 04:46:43 +0800 CST

如何配置 consul 从 Ingress 网关访问网页

  • 0

我正在尝试为部署在 AKS 中的领事配置入口网关。

根据他们的文档,我创建了一个示例部署和入口网关。

yaml 文件:github

kubectl apply -f static-app/

我将静态应用服务从 CluserIP 更改为 LoadBalancer 并且可以使用http://<LB_IP>

但是,使用入口网关,我只能通过添加以下标头来访问:

curl -H "Host: static-server.ingress.consul" "http://<IG_IP>:8080"

如果我尝试不使用标题,则不会获取页面。

关于如何使其在没有标题的情况下工作的任何建议,以便我可以将其用于我的主要应用程序。

部署后,我可以在 consul 窗口中看到并使用 ingress-gateway 获取 IP 地址

service kubernetes aks consul
  • 1 个回答
  • 440 Views
Martin Hope
Nemanja Todorovic
Asked: 2021-06-23 03:50:47 +0800 CST

AKS 版本升级错误:操作失败,状态为:“冲突”。详细信息:集群处于故障状态时不允许升级

  • 1

我注意到 AKS 服务之一处于失败状态。当我去诊断时,我发现不再支持当前版本。所以我尝试按照此处所述的说明进行操作:https ://docs.microsoft.com/en-us/azure/aks/upgrade-cluster

我首先运行了命令:

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table

接着:

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version new_version

这会产生一个错误:

操作失败,状态为:“冲突”。详细信息:当集群处于故障状态时,不允许升级。有关解决步骤,请访问https://aka.ms/aks-cluster-failed以排除集群状态可能失败的原因以及修复集群状态的步骤。

因此,由于旧版本导致状态失败,并且由于状态失败而无法更新版本......我检查了这个https://stackoverflow.com/questions/54631309/this-container-service-is-in-a-失败状态,但这不是我们的问题,我们有很多资源可以使用(我们检查过az aks show --resource-group myResourceGroup --name myAKSCluster --query agentPoolProfiles)

删除和重新创建 AKS 不是一种选择。

azure aks
  • 1 个回答
  • 1468 Views
Martin Hope
Sio
Asked: 2021-04-09 01:22:15 +0800 CST

为什么不使用大型子网来解决 AKS Azure CNI 中的 IP 耗尽问题?

  • 0

我正在阅读几篇关于在使用 Azure CNI 时为 AKS K8S 群集规划 IP 地址的文章,例如这篇文章。他们都描述了 IP 耗尽的风险,并建议将每个节点的最大 pod 数减少到 30。这些示例似乎都显示了 CIDR 示例,例如 /21。

我的问题是,为什么不直接使用 /16 这样的大子网呢?65,536 个 IP 地址对于大多数情况下 IP 耗尽不是一个问题来说绰绰有余吗?我错过了什么?

networking azure aks azure-networking
  • 1 个回答
  • 189 Views
Martin Hope
Owen Martin
Asked: 2021-01-01 16:04:00 +0800 CST

Azure Kubernetes 服务上的 nginx 入口 IP 许可名单

  • 0

我有一个 SOLR 集群,它设置了一个 LoadBalancer 类型的服务来公开端口 8983。一个要求是 SSL 终止,所以我设置了一个 nginx 入口控制器,其中包含到后端服务的路由。所有这些都按预期工作,但是我现在想限制对某些 IP 的访问。

当我尝试使用 nginx.ingress.kubernetes.io/whitelist-source-range 注解时,我注意到请求都来自节点的内部 IP,而不是像预期的那样来自客户端。这是否意味着需要在流量到达 AKS 群集之前对其进行过滤?如果是这样,那么最好的方法是什么,因为似乎不建议修改自动创建的 NSG。

azure aks nginx-ingress
  • 1 个回答
  • 885 Views
Martin Hope
Ben Davis
Asked: 2020-11-11 08:13:51 +0800 CST

为什么当节点有足够的可用资源时,Pod 无法调度?

  • 3

我的应用程序中的 pod 扩展为每个用户 1 个 pod(每个用户都有自己的 pod)。我对应用程序容器设置的限制如下:

  resources:
    limits:
      cpu: 250m
      memory: 768Mi
    requests:
      cpu: 100m
      memory: 512Mi

我的节点池中的节点每个都有 8GB 内存。我启动了一堆用户实例来开始测试,并看着我的资源指标随着我启动每个实例而上升:

中央处理器:

在此处输入图像描述

记忆:

在此处输入图像描述

在 15:40,我看到事件日志显示了这个错误(注意:第一个节点被排除在外):

0/2 nodes are available: 1 Insufficient memory, 1 node(s) didn't match node selector.

当内存/cpu 请求仍远低于总容量(cpu 约为 50%,mem 约为 60%)时,为什么会发生这种情况?

以下是一些相关信息kubectl describe node:

Non-terminated Pods:          (12 in total)
  Namespace                   Name                                                               CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                                               ------------  ----------  ---------------  -------------  ---
  ide                         theia-deployment--ac031811--football-6b6d54ddbb-txsd4              110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    13m
  ide                         theia-deployment--ac031811--footballteam-6fb7b68794-cv4c9          110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    12m
  ide                         theia-deployment--ac031811--how-to-play-football-669ddf7c8cjrzl    110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    14m
  ide                         theia-deployment--ac031811--packkide-7bff98d8b6-5twkf              110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    9m54s
  ide                         theia-deployment--ac032611--static-website-8569dd795d-ljsdr        110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    16m
  ide                         theia-deployment--aj090111--spiderboy-6867b46c7d-ntnsb             110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    2m36s
  ide                         theia-deployment--ar041311--tower-defenders-cf8c5dd58-tl4j9        110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    14m
  ide                         theia-deployment--np091707--my-friends-suck-at-coding-fd48ljs7z    110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    4m14s
  ide                         theia-deployment--np091707--topgaming-76b98dbd94-fgdz6             110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    5m17s
  kube-system                 csi-azurefile-node-nhbpg                                           30m (1%)      400m (21%)  60Mi (1%)        400Mi (7%)     12d
  kube-system                 kube-proxy-knq65                                                   100m (5%)     0 (0%)      0 (0%)           0 (0%)         12d
  lens-metrics                node-exporter-57zp4                                                10m (0%)      200m (10%)  24Mi (0%)        100Mi (1%)     6d20h

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                       Requests      Limits
  --------                       --------      ------
  cpu                            1130m (59%)   3750m (197%)
  memory                         4836Mi (90%)  7988Mi (148%)
  ephemeral-storage              0 (0%)        0 (0%)
  hugepages-1Gi                  0 (0%)        0 (0%)
  hugepages-2Mi                  0 (0%)        0 (0%)
  attachable-volumes-azure-disk  0             0
kubernetes azure aks autoscaling
  • 2 个回答
  • 3909 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve